我有这段文字
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 组,捕获)
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/