从MDN上看到RegExp.prototype.test()方法是执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。
这没问题,可以使用
var re = /\d/;
console.log(re.test("4")); // true
console.log(re.test("4")); // true
console.log(re.test("4")); // true
console.log(re.test("4")); // true
但是当学生写了一个全局匹配,同一个正则调用了多次,出现了第二次的结果与第一次的结果相反的问题,如下:
var re = /\d/g;
console.log(re.test("4")); // true
console.log(re.test("4")); // false
console.log(re.test("4")); // true
console.log(re.test("4")); // false
这时候一下子也不知道是什么原因了,然后去MDN上查了一下,知道了原因,在RegExp对象上面有一个属性(注意不是方法) lastIndex,下面是MDN截图

var re = /\d/g;
console.log( re.test("2"), re.lastIndex ); // true 1
console.log( re.test("2"), re.lastIndex ); // false 0
console.log( re.test("2"), re.lastIndex ); // true 1
console.log( re.test("2"), re.lastIndex ); // false 0
第一次匹配结果为 true 表示匹配成功,此时 lastIndex 记录下一次匹配的起始位置为 1。 于是第二次匹配的时候 从 "1" 字符串索引 1 的位置匹配,当然就匹配失败了,因为这个字符串只有一个字符,他的索引是 0。
为了让大家更方便理解lastIndex作用看下面例子:
var re = /\d/g;
console.log( re.test("3"), re.lastIndex ); // true 1
console.log( re.test("12"), re.lastIndex ); // true 2
console.log( re.test("111"), re.lastIndex ); // true 3
console.log( re.test("122"), re.lastIndex ); // false 0