全局搜索时在JavaScript中使用RegExp的错误

Geo*_*dov 5 javascript regex

可能重复:
Javascript正则表达式返回true ..然后为false ..然后为true ..等等

首先,为我糟糕的英语道歉.

我正在尝试测试字符串以匹配模式,所以我写了这个:

var str = 'test';
var pattern = new RegExp('te', 'gi'); // yes, I know that simple 'i' will be good for this
Run Code Online (Sandbox Code Playgroud)

但我有这个意想不到的结果:

>>> pattern.test(str)
true
>>> pattern.test(str)
false
>>> pattern.test(str)
true
Run Code Online (Sandbox Code Playgroud)

有谁能解释一下?

Dav*_*und 12

这种行为的原因是RegEx不是无状态的.你的第二个test将继续寻找字符串中的下一个匹配,并报告它不再找到.进一步搜索从头开始,lastIndex当找不到匹配时重置:

var pattern = /te/gi;

pattern.test('test');
>> true
pattern.lastIndex;
>> 2

pattern.test('test');
>> false
pattern.lastIndex;
>> 0
Run Code Online (Sandbox Code Playgroud)

当有两个匹配时,您会注意到这种变化,例如:

var pattern = /t/gi;

pattern.test('test');
>> true
pattern.lastIndex;
>> 1

pattern.test('test');
>> true
pattern.lastIndex;
>> 4

pattern.test('test');
>> false
pattern.lastIndex;
>> 0
Run Code Online (Sandbox Code Playgroud)