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)

  • 相关阅读:
    安卓学习Day11
    J2EE-Day09-Servlet
    J2EE-Day08-Tomcat
    安卓学习Day10
    安卓学习Day09
    安卓学习Day08
    安卓学习Day07
    安卓学习Day06
    YII 1.0 常用CURD写法
    php 封装原生数据导出的方法(csv文件格式)和csv文件中长数字自动变成科学计数法的处理
  • 原文地址:https://www.cnblogs.com/coolle/p/6257017.html
Copyright © 2011-2022 走看看