我在 Expresso 中找到了一个正则表达式模板,这个模板工作正常并返回完美匹配,但在 JavaScript 中它不起作用。我知道它可能用于后视,但我在正则表达式中的效率不够高,无法使其与 JS 兼容。
\((?>[^()]+|\((?<number>)|\)(?<-number>))*(?(number)(?!))\)
我想将它与...匹配
max(50, max(51, 60)) a() MAX(s,4,455)something
...它应该返回...
1: (50, max(51, 60))
2: ()
3: (s,4,455)
这在 Expresso 中完美运行,但 Chrome 中的 JS 控制台说:
Uncaught SyntaxError: Invalid regular expression: /\((?>[^()]+|\((?<number>)|\)(?<-number>))*(?(number)(?!))\)/: Invalid group
如何修改此正则表达式以在 JavaScript 中正常运行?
最佳答案
JavaScript 不支持 named capture groups (?<number>)
如 this question 中的建议, regex 可能不是完成这项工作的正确工具。但是,如果您只想匹配最外面的括号组,您可以使用这个
/\([^)]*(\s?\))*\)/g
在 http://refiddle.com/114 查看它的工作情况
关于javascript - 如何使这个正则表达式与 JavaScript 兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5886386/