Javascript 我的简单正则表达式没有';行不通
我有一个简单的正则表达式,它应该匹配任何数字和“+”符号Javascript 我的简单正则表达式没有';行不通,javascript,regex,Javascript,Regex,我有一个简单的正则表达式,它应该匹配任何数字和“+”符号 /^[\d\+]+$/g 它的作用是: 1 => true 11 => false 11+11 => true 1+1 => false 它快把我逼疯了 (如果有必要的话,我正在使用JavaScript)我在复制错误时做了一些假设: 您使用的是RegExp-prototype的test()-方法,而不是String-prototype的match()-方法 您的模式存储在一个变量中,您可以通过多次调用test
/^[\d\+]+$/g
它的作用是:
1 => true
11 => false
11+11 => true
1+1 => false
它快把我逼疯了
(如果有必要的话,我正在使用JavaScript)我在复制错误时做了一些假设:
RegExp
-prototype的test()
-方法,而不是String
-prototype的match()
-方法test()
-方法重用它test()
-方法的后续调用超过前面的匹配,如上所述。这本质上意味着,在计算第一个正则表达式并找到匹配项后,此匹配项的索引将存储到RegExp
-对象中,下一个匹配项将从该索引开始,在开始处省略一些字符。要想得到更深入的解释,我建议阅读
这不是你真正想要的,对吧?我的快速建议是简单地删除全局标志,因为从我的观点来看,您并不真正需要它。如果要确保正则表达式只匹配完整字符串而不是子字符串,请使用^
和$
元字符(正如您已经做的那样)
编辑: 但是,如果您确实需要全局标志,请尝试使用
字符串
-prototype的match()
-方法,因为它不会超过以前的匹配。相反,它使用推进功能并捕获所有匹配项,然后重置索引
var pattern = /^[\d\+]+$/g;
"1".match(pattern); // => true
"11+11".match(pattern); // => true
"1+1abc".match(pattern); // => false
我在再现您的错误时所做的一些假设:
RegExp
-prototype的test()
-方法,而不是String
-prototype的match()
-方法test()
-方法重用它test()
-方法的后续调用超过前面的匹配,如上所述。这本质上意味着,在计算第一个正则表达式并找到匹配项后,此匹配项的索引将存储到RegExp
-对象中,下一个匹配项将从该索引开始,在开始处省略一些字符。要想得到更深入的解释,我建议阅读
这不是你真正想要的,对吧?我的快速建议是简单地删除全局标志,因为从我的观点来看,您并不真正需要它。如果要确保正则表达式只匹配完整字符串而不是子字符串,请使用^
和$
元字符(正如您已经做的那样)
编辑: 但是,如果您确实需要全局标志,请尝试使用
字符串
-prototype的match()
-方法,因为它不会超过以前的匹配。相反,它使用推进功能并捕获所有匹配项,然后重置索引
var pattern = /^[\d\+]+$/g;
"1".match(pattern); // => true
"11+11".match(pattern); // => true
"1+1abc".match(pattern); // => false
你想干什么?你想匹配什么,不想匹配什么?@bnjmn:但是字符类后面有一个
+
。这个正则表达式应该匹配-一定还有其他问题。当对您提供的所有测试用例进行测试时,正则表达式返回true
。。。您在哪个浏览器上运行此功能?@user3195878它似乎适合我们。你能提供一个例子来说明这个问题吗?@DoorknobofSnow谢谢你纠正我,我会急切地等着看:)如果他只想要数字(数字序列)和中缀加号,这不管用吗(如果我错了,请再次纠正我):/^\d*[\+\d*]*$/g
?你想匹配什么,不想匹配什么?@bnjmn:但是字符类后面有一个+
。这个正则表达式应该匹配-一定还有其他问题。当对您提供的所有测试用例进行测试时,正则表达式返回true
。。。您在哪个浏览器上运行此功能?@user3195878它似乎适合我们。你能提供一个例子来说明这个问题吗?@DoorknobofSnow谢谢你纠正我,我会急切地等着看:)如果他只想要数字(数字序列)和中缀加号,这不管用吗(如果我错了,请再次纠正我):/^\d*[\+\d*]*$/g
?你第一次做对了;将g
标志与锚定在一端或两端的正则表达式一起使用是没有意义的。是的,这就是问题所在。为了方便起见,我将所有测试值放在一个数组中,并在其上循环。g旗实际上就是丘比特旗。谢谢你第一次做对了;将g
标志与锚定在一端或两端的正则表达式一起使用是没有意义的。是的,这就是问题所在。为了方便起见,我将所有测试值放在一个数组中,并在其上循环。g旗实际上就是丘比特旗。谢谢