Javascript 为什么RegEx.test会在后续调用中更改结果?
为什么以下内容从Javascript 为什么RegEx.test会在后续调用中更改结果?,javascript,regex,Javascript,Regex,为什么以下内容从true变为false var r = /e/gi; r.test('e'); // true r.test('e'); // false 然后它继续切换true,false,true,false,…Its,因为g标志。它开始记住匹配的最后一个索引,下次执行r.test时,它从该索引开始。这就是为什么它在true和false之间交替出现的原因。试试这个 var r = /e/gi; console.log(r.test('e')); # true console.log(r.l
true
变为false
var r = /e/gi;
r.test('e'); // true
r.test('e'); // false
然后它继续切换
true
,false
,true
,false
,…Its,因为g
标志。它开始记住匹配的最后一个索引,下次执行r.test
时,它从该索引开始。这就是为什么它在true
和false
之间交替出现的原因。试试这个
var r = /e/gi;
console.log(r.test('e'));
# true
console.log(r.lastIndex);
# 1
console.log(r.test('e'));
# false
console.log(r.lastIndex);
# 0
console.log(r.test('e'));
# true
console.log(r.lastIndex);
# 1
console.log(r.test('e'));
# false
引用有关的MDN文档
lastIndex
是正则表达式的读/写整数属性,指定开始下一次匹配的索引。
仅当正则表达式使用“g”标志指示全局搜索时,才设置此属性。以下规则适用:
lastIndex
大于字符串长度,test()
和exec()
失败,则lastIndex
设置为0lastIndex
等于字符串的长度,并且如果正则表达式匹配空字符串,则正则表达式匹配从lastIndex
开始的输入lastIndex
等于字符串的长度,并且如果正则表达式与空字符串不匹配,则正则表达式与输入不匹配,并且lastIndex
重置为0。lastIndex
将设置到最近匹配后的下一个位置e
,将lastIndex
设置为1
,以指示下一次匹配的索引。根据上面看到的第三点,由于lastIndex
等于字符串的长度,并且正则表达式与空字符串不匹配,因此它返回false
并将lastIndex
重置为0