zoukankan      html  css  js  c++  java
  • JS中误用/g导致的正则test()无法正确重复执行

    一个简单的利用正则判断输入是否为数字:

    input1 = '0281234567';
    input2 = '0282345678';
    var
    reg = /^d+$/g; reg.test(input1); //true reg.test(input2); //false

    发现第二次test的时候返回的值不对了.排除书写错误,取值失败等等各种干扰因素后,发现仅仅是reg正则第二次执行的时候就无法正确执行了.之前并未遇到过这个问题,便搜索了一下相关信息.

    原来这个问题实际上是/g导致的,而此时也才发现,实际上这个正则我误用了一个/g.因为/g代表全局匹配,所以判断正则时内部是有一个lastIndex来记录最后匹配的位置.当重复调用的时候,会接着上次的lastIndex继续匹配,故而将导致判断出错.明白了原理解决起来也就很明了了:

    1.去掉/g,在不需要/g的情况下不要随意添加/g标识

    2.第二次匹配前,手动将lastIndex置0,以上面的例子来说:reg.lastIndex()=0即可.

  • 相关阅读:
    codevs1004 四子连棋
    codevs1009 产生数
    NOIP2014 寻找道路
    Tyvj1139 向远方奔跑(APIO 2009 抢掠计划)
    随机算法
    线性基
    线性基入门
    线性基 + 并查集
    欧拉公式 (平面)
    卡特兰数 + 大数
  • 原文地址:https://www.cnblogs.com/chyu/p/5710840.html
Copyright © 2011-2022 走看看