这个正则表达式如何与JavaScript兼容?
发布时间:2020-12-14 06:08:04 所属栏目:百科 来源:网络整理
导读:我在Expresso中找到了一个正则表达式模板,这个工作正常并且返回完美的匹配但是在 JavaScript中它不起作用.我知道它可能是为了后视,但我在Regex中的效率不足以使它与JS兼容. ((?[^()]+|((?number)|)(?-number))*(?(number)(?!))) 我想把它与……相匹配 ma
我在Expresso中找到了一个正则表达式模板,这个工作正常并且返回完美的匹配但是在
JavaScript中它不起作用.我知道它可能是为了后视,但我在Regex中的效率不足以使它与JS兼容.
((?>[^()]+|((?<number>)|)(?<-number>))*(?(number)(?!))) 我想把它与……相匹配 max(50,max(51,60)) a() MAX(s,4,455)something ……它应该回归…… 1: (50,60)) 2: () 3: (s,455) 这在Expresso中完美运行,但Chrome中的JS控制台说: Uncaught SyntaxError: Invalid regular expression: /((?>[^()]+|((?<number>)|)(?<-number>))*(?(number)(?!)))/: Invalid group 如何修改此正则表达式以在JavaScript中正常运行? 解决方法
假设您的给定正则表达式是
.NET regular expression,JavaScript不支持以下语法组件:
>(?> …) – nonbacktracking subexpression 要使用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 ")"'); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |