我正在使用两个网站Eloquent JavaScript和regular 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)"));
答案 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_]
的简写,您无需转义所有这些符号。