javascript - 正则表达式 - 匹配重复标签的 "parent child"关系

标签 javascript regex

我有这段文字

parent( child( child_of_child(value)  ) )

这个正则表达式模式与数学运算

([a-z]+\(.*\))

我使用的 Javascript 代码

'parent( child( child_of_child(value)  ) )'.match(/([a-z]+\(.*\))/g)

当前结果:

["parent( child( child_of_child(value)  ) )"]

预期结果:

parent: {
     m: 'parent( child( child_of_child(value)  ) )',
     child: {
        m: 'child( child_of_child(value)  )',
        child: {
            m: 'child_of_child(value)'
        }
     }
}

非常欢迎任何方向的帮助

最佳答案

您可以使用递归函数和具有 4 个捕获组的模式,您可以在其中匹配从左括号到右括号。

然后在下一次迭代中检查模式是否仍然匹配。在下一次调用中,使用组来构造具有键和值的对象。

([^()]+)(\()(.*)(\))
  • ([^()]+) 第1组,捕获1+次不是( or )
  • (\() 第 2 组,捕获 (
  • (.*) 第 3 组,捕获任何字符 0 次以上,换行符除外
  • (\)) 第 4 组,捕获 )

Regex demo

let pattern = /([^()]+)(\()(.*)(\))/;
let string = "parent( child( child_of_child(value)  ) )";

function parse(str, obj) {
  if (pattern.test(str)) {
    let res = str.match(pattern);
    res.shift();
    parse(res[2], obj[res[0]] = {
      'm': res.join('')
    });
  }
  return obj;
}

console.log(JSON.stringify(parse(string, {}), null, 2));

关于javascript - 正则表达式 - 匹配重复标签的 "parent child"关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56787956/

相关文章:

javascript - Jquery 边框颜色切换问题

javascript - 如何让 Angular 在 jqLit​​e 上使用 jQuery

c++ - c++11中正则表达式的使用

c# - 搜索文件,只返回重复的字符串

regex - NGINX/带有正则表达式的位置

java - 正则表达式:如何捕获这个? (重复组中的嵌套组)

javascript - 如何在多行字符中只显示一个标签?

javascript - 正则表达式匹配中间的数字

javascript - 如何使用 php 将表格数据下载为 excel 表?

使用 or 运算符时,Python 正则表达式的模糊搜索不会返回所有匹配项