为什么我的javascript regex.test()给出了交替的结果

Den*_*rge 71 javascript regex

可能重复:
Javascript正则表达式返回true ..然后为false ..然后为true ..等等

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
Run Code Online (Sandbox Code Playgroud)

请向我解释为什么r.test("1")每次通话交替的结果?

通过删除g修饰符,我能够解决我遇到的问题.但是我仍然想知道为什么会这样.

pkh*_*pkh 107

当您使用时/g,正则表达式对象将在调用之间保存状态(因为您应该使用它来匹配多个调用).它匹配一次,但后续调用从原始匹配开始.

(这是Javascript正则表达式的副本,返回true ..然后为false ..然后为true ..等等)

  • 浪费我的生命调试这个奇怪的东西...... (4认同)
  • 不,因为 `lastIndex` 是正则表达式的属性,而不是字符串。相比之下,在 Perl 中,它与字符串(`pos` 属性)相关联,而在 Java 中,它由 Matcher 对象维护。`lastIndex` 是一个令人沮丧的根源:http://blog.stevenlevithan.com/archives/fixing-javascript-regexp (2认同)