Javascript正则表达式与.test()

时间:2011-10-05 11:36:35

标签: javascript regex

> var p = /abc/gi;
> var s = "abc";
> p.test(s);
  true
> p.test(s);
  false;

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

3 个答案:

答案 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?