zoukankan      html  css  js  c++  java
  • 正则表达式test验证的“bug”

    在使用正则表达式对某些字符串进行验证时,我们常常会使用到test方法,而该方法也隐藏着一个陷阱,今天就让我们来看一下这个问题。

    var str = 'hello jack, hello rose';

    var reg = /jack/g;

    reg.test(str);  //true

    reg.test(str);  //false

    正如上面显示的结果一样,第一次是true,第二次是false,而不是我们所想的false、false

    那么为什么会出现这种情况?

    原因是正则表达式后面加上了全局参数g之后,每当使用test进行一次校验,在正则表达式内部就会有一个lastIndex来记录匹配的位置

    还是以上面的代码为例

    第一次进行test之后,lastIndex就变成了10,第二次test就是从位置10开始匹配,而不是从位置0开始了,所以就无法匹配到jack了,因此结果为false。

    有时候我们希望每次都是从头开始匹配,那么我们要如何来解决这个问题?

    1.去掉全局参数g

    2.每次使用后将lastIndex清0,即reg.lastIndex=0

    3.不将正则表达式保存到变量,即/jack/g.test(str) 或者 /jack/.test(str)

  • 相关阅读:
    能登陆QQ ping通外网 但打不开网页
    代码大全书写子程序要注意的几个问题?
    代码大全创建子程序的正当理由
    原创 插入排序算法
    堆结构的实现
    代码大全子程序层上的设计
    五十。java
    四十七。java
    四十九。java
    五十二。java
  • 原文地址:https://www.cnblogs.com/coolle/p/6257017.html
Copyright © 2011-2022 走看看