为什么我的javascript regex.test()会给出交替的结果
可能重复:为什么我的javascript regex.test()会给出交替的结果,javascript,regex,Javascript,Regex,可能重复: 请向我解释为什么r.test(“1”)的结果在每次调用时交替出现 我可以通过移除g修饰符来解决我遇到的问题。但是我仍然想理解为什么会发生这种情况。当您使用/g时,regex对象将在调用之间保存状态(因为您应该使用它来匹配多个调用)。它匹配一次,但后续调用从原始匹配后开始 (这是的副本)谢谢!我发现了一些更详细的解释。test基本上是.exec()的简写形式null,它是.exec(),用于存储下一次调用的最后索引。()奇怪的是,即使为每个调用指定不同的字符串,也会发生相同的情况。如
请向我解释为什么
r.test(“1”)
的结果在每次调用时交替出现
我可以通过移除g修饰符来解决我遇到的问题。但是我仍然想理解为什么会发生这种情况。当您使用
/g
时,regex对象将在调用之间保存状态(因为您应该使用它来匹配多个调用)。它匹配一次,但后续调用从原始匹配后开始
(这是的副本)谢谢!我发现了一些更详细的解释。test基本上是.exec()的简写形式null,它是.exec(),用于存储下一次调用的最后索引。()奇怪的是,即使为每个调用指定不同的字符串,也会发生相同的情况。如果在不同的字符串上调用lastIndex,是否不会重置它?否,因为
lastIndex
是正则表达式的属性,而不是字符串。相比之下,在Perl中,它与字符串(pos
属性)关联,而在Java中,它由Matcher对象维护lastIndex
令人沮丧:浪费我的生命调试这件奇怪的事情……我花了2天时间调试一个服务人员,该服务人员基于/./g regexp随机缓存资产。现在解释了原因。
var r = /\d/g;
var a = r.test("1"); // will be true
var b = r.test("1"); // will be false
console.log(a == b); // will be false