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

nw.*_*nw. 4 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
Run Code Online (Sandbox Code Playgroud)

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

> /.*?\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
Run Code Online (Sandbox Code Playgroud)

我无法解释这一点,它使调试变得非常困难.谁能解释这种行为?

bob*_*nce 9

/g (全局)regexps会这样做,是的.

看到这个问题.

当你写一个文字时,你每次都会得到一个新的正则表达式对象,所以丢失了lastIndex与旧对象相关的状态.