同一个正则表达式两次匹配结果不通

图片说明

RegExp 对象的 exec 和 test 方法,以及 String 对象的 match、replace、和 split 方法会修改RegExp 对象的lastIndex 属性
lastIndex 属性是成功匹配后下一次匹配的开始位置。

对一个RegExp 对象调用 test 方法之后,如果成功匹配,RegExp对象的lastIndex属性会被设置为匹配结果的结束位置。
当对同一个RegExp 对象第二次调用 test 方法时,会从lastIndex属性的位置开始查找,就不是从头开始查找了。
如果希望第二次调用 test 方法时,从头开始查找,在调用 test 方法之前要把lastIndex属性设置为0或-1
或者每次都重新创建一个RegExp 对象

这是因为reg里面有一个lastIndex的属性记录了最后一次成功匹配的位置。第二次又从lastIndex开始了。为此,把lastIndex重新置为0或者把/g去掉才行

不能像你那样搞,正则Regexp是一个对象,每次匹配都会将当前匹配信息保存到自身相关属性里:
运行下面代码你就明白了:

var reg = /a/g
    var s = "aa";
    console.info(reg.test(s))
    alert(reg.lastIndex)//由于有g参数,每一次匹配会保存上次匹配的下标,下次再次运行就会从上次匹配之后继续搜索匹配
    console.info(reg.test(s))
        alert(reg.lastIndex)
    console.info(reg.test(s))

    正确的写法是每次都使用 /rex/.test("cc")