正则表达式测试不能在true和false之间做出决定(JavaScript)

时间:2010-04-19 18:29:29

标签: javascript regex

我在Chrome(开发者工具)和Firefox(Firebug)中都有这种行为。请注意,正则表达式测试返回交替的true / false值:

> var re = /.*?\bbl.*\bgr.*/gi;
undefined
> re
/.*?\\bbl.*\\bgr.*/gi
> re.test("Blue-Green");
true
> re.test("Blue-Green");
false
> re.test("Blue-Green");
true
> re.test("Blue-Green");
false

但是,测试与文字相同的正则表达式:

> /.*?\bbl.*\bgr.*/gi.test("Blue-Green");
true
> /.*?\bbl.*\bgr.*/gi.test("Blue-Green");
true
> /.*?\bbl.*\bgr.*/gi.test("Blue-Green");
true
> /.*?\bbl.*\bgr.*/gi.test("Blue-Green");
true

我无法解释这一点,而且调试非常困难。任何人都可以解释这种行为吗?

1 个答案:

答案 0 :(得分:9)

/g(全局)正则表达式会这样做,是的。

请参阅this question

当你写一个文字时,你每次都会得到一个新的regexp对象,所以失去了与旧对象相关的lastIndex状态。