Javascript正则表达式与.test()

Fel*_*uto 7 javascript regex

> var p = /abc/gi;
> var s = "abc";
> p.test(s);
  true
> p.test(s);
  false;
Run Code Online (Sandbox Code Playgroud)

当我在Chrome控制台上运行此代码时,我在上面输出了此输出.每次我调用'.test()',我都会得到不同的价值.有人可以向我解释为什么会这样吗?谢谢

Ste*_*fan 9

行为是由于"g"修饰符,即匹配三次,第四次不匹配:

> var p = /a/gi;
> var s = "aaa";
> p.test(s)
true
> p.test(s)
true
> p.test(s)
true
> p.test(s)
false
Run Code Online (Sandbox Code Playgroud)

看到类似的问题:为什么在Javascript中使用全局标志的RegExp会给出错误的结果?


Ale*_* K. 5

g标志使您使用的RegExp文字跟踪匹配LastIndex

如果你这样做;

print( p.test(s), p.lastIndex )
print( p.test(s), p.lastIndex )
Run Code Online (Sandbox Code Playgroud)

你会看到

true,3
false,0
Run Code Online (Sandbox Code Playgroud)

所以第二次测试失败,因为第一次没有增量匹配.