var re = /abc/g;console.log(re.test("abcd")===re.test("abcd")); // false
慕田峪9158850
浏览 605回答 2
2回答
慕的地8271018
test() called multiple times on the same global regular expression instance will advance past the previous match因为例子中的正则带了g,所以每次调用test方法会先获取一个隐藏属性lastIndex,会跳过上次已经搜索过的部分。下次调用时,就从前一次的lastIndex开始搜索。结果搜不到,就返回false。lastIndex置为0,再下一次调用时,就又能搜到了多次执行下面的这条语句就看明白了console.log(re.lastIndex, re.test('abc')); // 0 trueconsole.log(re.lastIndex, re.test('abc')); // 3 falseconsole.log(re.lastIndex, re.test('abc')); // 0 true