> var p = /abc/gi;
> var s = "abc";
> p.test(s);
true
> p.test(s);
false;
当我在Chrome控制台上运行此代码时,我将此输出上面。每次我调用'.test()',我都会得到不同的价值。有人可以向我解释为什么会这样吗?感谢
答案 0 :(得分: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
查看类似问题:Why RegExp with global flag in Javascript give wrong results?
答案 1 :(得分:5)
g
标记会导致您使用的RegExp文字跟踪匹配LastIndex
如果你这样做;
print( p.test(s), p.lastIndex )
print( p.test(s), p.lastIndex )
你会看到
true,3
false,0
所以第二次测试失败,因为第一次没有增量匹配。
答案 2 :(得分:2)
这是因为/ g标志。每个连续搜索都从上一次搜索中最后匹配的字符开始。在您的情况下,在第二次运行中,它从字符串的结尾开始并返回false。第三次从头开始。等等。
另外,看看这个问题: Why RegExp with global flag in Javascript give wrong results?