我正在尝试获取这样的字符串输入:
{p}This is a paragraph{/p} {img}(path/to/image) {p}Another paragraph{/p}
像这样返回一个对象数组
[
{"txt" : "This is a paragraph" },
{"img" : "path/to/image"},
{"txt" : "Another paragraph"}
]
我需要按照找到数组的顺序对数组进行索引——即在上面的示例中,第一段的索引为 0,图像的索引为 1,依此类推。
我可以用下面的代码得到很好的字符串,但我不确定如何修改它以遍历整个字符串并将对象放在一起。所以任何指针将不胜感激
var p = /{p}(.*){\/p}/gmi;
var i = /{img}\((.*)\)/gmi;
var test = "{p} This is a paragraph {/p} {img}(text)";
function returnJson(test) {
var ps = p.exec(test);
var im = i.exec(test)
var arr = [];
if (ps.length > 1) {
arr.push({"txt" : ps[1]})
}
if (im.length > 1) {
arr.push({"img" : im[1]})
}
return arr;
}
我想做一个递归函数,用字符串替换找到的匹配项。但是后来我不确定如何按照找到它们的顺序获取数组。非常感谢任何提示。
最佳答案
你可以使用这个正则表达式
/{(\w+)}([^{]+)(?:{\/\1})?/g
然后像这样使用 exec
创建一个数组:
let str = "{p}This is a paragraph{/p} {img}(path/to/image) {p}Another paragraph{/p}";
let regex = /{(\w+)}([^{]+)(?:{\/\1})?/g;
let match;
let matches = [];
while (match = regex.exec(str)) {
if(match[1] == "p")
matches.push({ txt: match[2] })
else
matches.push({ [match[1]]: match[2]})
}
console.log(matches)
{(\w+)}
获取捕获组的标签名([^{]+)
获取内容到另一个捕获组(?:{\/\1})?
可选择匹配结束标记。 (\1
指第一个捕获组)
关于javascript - 正则表达式:如何从 javascript 中的所有匹配项创建对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54959296/