我在C#中创建了以下正则表达式,以{token}格式从字符串中提取标记。我在C#中开发了正则表达式并确认它有效。
// c#
var regex = new Regex(
"\\{ (?>[^{}]+| \\{ (?<number>) | \\} (?<-number>) )*(?(number)(?!))\\}",
RegexOptions.IgnoreCase | RegexOptions.CultureInvariant |
RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled);
var matches = regex.Matches("blah {token1} blah blah blah {token2} blah");
变量matches
最终包含两个匹配项 - “{token1}”和“{token2}”。
我需要在JavaScript中执行此操作,但是当我尝试执行以下行时,表达式中出现语法错误...
// JavaScript
var regex = new RegExp("\\{ (?>[^{}]+| \\{ (?<number>) | \\} (?<-number>) )*(?(number)(?!))\\}");
有什么明显的我做错了吗? 我是否尝试使用JavaScript不支持的RegEx功能?
答案 0 :(得分:4)
Javascript正则表达式不支持使用(?> ... )
限定的独立子表达式。实际上?
被评估为量词。
答案 1 :(得分:4)
如果要匹配所有出现的“{something}”,请尝试:
\{[^\}]*\}
还是有另一种必须满足的条件吗?比如{token [0-9]}?
http://rubular.com/可以帮助您进行测试。
答案 2 :(得分:2)
重点是,如果使用C#(或Java),则使用字符串来编写正则表达式。在这样的字符串中,您需要再次转义所有转义字符,这就是为什么您需要“\\ {”来转义“{”。然而,JavaScript支持它自己的正则表达式语法,类似于Perl和PHP。