我如何使用regex在字符串(test1)=(tes=)t2的等号的每一边获得匹配



我需要捕获等号:(test1)=(test2)之间的两个匹配,以便match1 = test1和match2 = test2。到目前为止,我已经能够使用/([sS)(]*?)/gmi,这主要是有效的,除非在等号的两侧有一个额外的父括号,即:(test1)=(te)st2)。

我可以创建什么样的正则表达式,使我能够成功地得到以下两个匹配:

"(test1)=(tes=)t2)".match( /([sS)(]*?)/gmi ) === ["test1", "tes=)t2"]

对于问题中的示例,如果支持使用查找,则可以断言右括号不能包含=)

请注意,您可以省略/m标志,因为模式中没有锚点,您也可以省略/i标志,因为模式没有特别匹配大写或小写字符。

let regex = /(?<=().*?(?=)(?![^s=)]))/g;
let str = "(test1)=(tes=)t2)";
console.log(str.match(regex));

或者使用不带向后看断言的捕获组:

let regex = /((.*?))(?![^s=])/g;
let str = "(test1)=(tes=)t2)";
const result = Array.from(str.matchAll(regex), m => m[1]);
console.log(JSON.stringify(result) === JSON.stringify(["test1", "tes=)t2"]));

相关内容

  • 没有找到相关文章

最新更新