首先,为我糟糕的英语道歉.
我正在尝试测试字符串以匹配模式,所以我写了这个:
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)
| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |