JavaScript RegEx语法错误

时间:2010-12-15 10:13:22

标签: javascript regex

我在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功能?

3 个答案:

答案 0 :(得分:4)

Javascript正则表达式不支持使用(?> ... )限定的独立子表达式。实际上?被评估为量词。

答案 1 :(得分:4)

如果要匹配所有出现的“{something}”,请尝试:

\{[^\}]*\}

还是有另一种必须满足的条件吗?比如{token [0-9]}?

http://rubular.com/可以帮助您进行测试。

答案 2 :(得分:2)

重点是,如果使用C#(或Java),则使用字符串来编写正则表达式。在这样的字符串中,您需要再次转义所有转义字符,这就是为什么您需要“\\ {”来转义“{”。然而,JavaScript支持它自己的正则表达式语法,类似于Perl和PHP。