正则表达式:如何从 javascript 中的所有匹配项创建对象数组?

use*_*900 4 javascript regex arrays sorting

我正在尝试获取如下字符串输入:

\n\n
{p}This is a paragraph{/p} {img}(path/to/image) {p}Another paragraph{/p}\n
Run Code Online (Sandbox Code Playgroud)\n\n

返回这样的对象数组

\n\n
[\n  {"txt" : "This is a paragraph" },\n  {"img" : "path/to/image"},\n  {"txt" : "Another paragraph"}\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我需要按照找到数组的顺序对数组进行索引 \xe2\x80\x93 即在上面的示例中,第一段获取索引 0,图像获取索引 1 等等。

\n\n

我可以使用下面的代码获得很好的字符串,但我不确定如何修改它以循环整个字符串并将对象放在一起。所以任何指示将不胜感激

\n\n
var p = /{p}(.*){\\/p}/gmi;\nvar i = /{img}\\((.*)\\)/gmi;\n\nvar test = "{p} This is a paragraph {/p} {img}(text)";\n\n\nfunction returnJson(test) {\n  var ps = p.exec(test);\n  var im = i.exec(test)\n  var arr = [];\n  if (ps.length > 1) {\n    arr.push({"txt" : ps[1]})\n  } \n  if (im.length > 1) {\n    arr.push({"img" : im[1]})\n  }\n  return arr;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在考虑执行一个递归函数,用字符串替换找到的匹配项。但后来我不确定如何按照找到的顺序获取数组。任何提示都非常感激。

\n

adi*_*iga 5

你可以使用这个正则表达式

/{(\w+)}([^{]+)(?:{\/\1})?/g
Run Code Online (Sandbox Code Playgroud)

exec并使用如下命令创建一个数组:

/{(\w+)}([^{]+)(?:{\/\1})?/g
Run Code Online (Sandbox Code Playgroud)

  • {(\w+)}获取捕获组的标签名称
  • ([^{]+)将内容获取到另一个捕获组
  • (?:{\/\1})?可选地匹配结束标记。(\1指第一个捕获组)