如何使这个正则表达式与JavaScript兼容?
How can this regex be made JavaScript compatible?
我在Expresso中找到了一个正则表达式模板,这个模板工作得很好,并返回完美匹配,但在JavaScript中它不起作用。我知道这可能是为了向后看,但我在Regex中没有足够的效率使其与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不支持命名捕获组(?<number>)
正如这个问题所建议的,regex可能不是适合这项工作的工具。但是,如果您只想匹配最外层的括号组,则可以使用
/'([^)]*('s?'))*')/g
见http://refiddle.co/114
假设给定的正则表达式是。net正则表达式,JavaScript不支持以下语法组件:
-
(?>…)
-非回溯子表达式 -
(?<name>…)
-命名匹配子表达式 -
(?<name1-name2>…)
-平衡组定义 -
(?(name)…)
-条件组
要在JavaScript中获得相同的结果,您需要自己进行平衡:
var parts = str.match(/[()]|[^()]+/g),
matches = [],
balance = 0;
for (var i=0, j=0; i<parts.length; i++) {
switch (parts[i]) {
case "(":
if (balance === 0) {
j = i;
}
balance++;
break;
case ")":
if (balance === 1) {
matches.push(parts.slice(j, i+1).join(""));
}
balance--;
if (balance < 0) {
throw new EvalError('parentheses are not balanced; unexpected "("');
}
break;
}
}
if (balance > 0) {
throw new EvalError('parentheses are not balanced; missing ")"');
}
Javascript中没有消极的向后看。你得另找办法。
编辑:我又看了你的RegEx,我以为我看到了消极的目光,但我想我没有。不管怎样,我将把这个留作参考。
在javascript中,数字可以用[0-9]或'd来定义没有数字是[^0-9]或'D
相关文章:
- 如何计算与php中的CRC32函数兼容的arrayBuffer(javascript中的From FileReader)
- three.js javascript/raycasting代码与retina显示器Mac不兼容
- 如何在jQuery/Javascript中使用OOP来传递一个跨浏览器兼容的值
- PHP JSON编码输出与Javascript Ajax不兼容
- 如何将JavaScript数组编码为与PHP兼容的“;数组参数“;在查询字符串中
- 如何让我的html5功能不兼容警告使用javascript工作
- 如何编写AMD兼容的JavaScript类
- 是否有与javascript兼容的本地数据库
- 从 Chrome 或 IE 中的 Javascript 本地读取 XML 文件;这也应该与安卓手机兼容
- Strava-V3 和 Javascript es6 生成器 = 不兼容
- IE6兼容的方式,通过Javascript将上传的文件发送到API
- 不兼容的 JavaScript
- JavaScript图表库是否可定制或与JavaFX兼容
- 使用 javascript 更改 IE 兼容模式
- javascript兼容chrome、safari和opera的字符串搜索功能
- 浏览器javascript兼容系统级js引擎
- PHP和Javascript兼容的加密功能
- 与Ruby和Javascript兼容的电子邮件正则表达式
- 与远程共享服务器上的javascript兼容的套接字
- 如何使这个正则表达式与JavaScript兼容?