qq_35433083
qq_35433083
采纳率62.5%
2018-09-04 08:26 阅读 958

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

5

图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    jslang 天际的海浪 2018-09-04 08:53

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

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

    点赞 2 评论 复制链接分享
  • yan88888888888888888 大广-全栈开发 2018-09-04 08:34

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

    点赞 2 评论 复制链接分享
  • zhaomin_g _zming 2018-09-04 08:44

    不能像你那样搞,正则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")
    
    
    点赞 1 评论 复制链接分享

相关推荐