JavaScript正则表达式中的返回引用错误

时间:2014-03-02 11:09:35

标签: javascript regex

我正在使用两个网站Eloquent JavaScriptregular expressions.info的组合教自己正则表达式。我试图通过自制示例使用反向引用,其中我希望大致能够测试Java while循环的语法正确性(假设我们将其限制为while(值运算符值)以简化)。 / p>

但是看看我下面的代码,您会看到引用\ 1似乎不起作用。我在JS中试过我的解决方案。还使用软件工具The Regex Coach。

有人能在这看到问题吗?

var rx = /^while\s*\((\s*[a-zA-Z][a-zA-Z0-9_]*\s*)(\<\=|\<|\>\=|\>|\!\=|\=\=)\s*\1\)/

document.writeln(rx.test("while(x <= y)"));

1 个答案:

答案 0 :(得分:1)

你的正则表达式匹配

while(x <= x )

因为\1与第一个捕获组匹配的确切文本匹配 - 在本例中为"x "。由于"y""x "不同,您的正则表达式会因您选择的示例而失败。

对于您的示例,以下内容可行:

var rx = /^while\s*\(\s*([a-zA-Z]\w*)\s*(<=?|>=?|!=|==)\s*([a-zA-Z]\w*)\s*\)$/

请注意,\w是JavaScript中[a-zA-Z0-9_]的简写,您无需转义所有这些符号。

相关问题