zoukankan      html  css  js  c++  java
  • 正则g修饰符对test方法的影响

    标签: js


    坑位

    最近在使用正则的时候遇到一个问题,从一个数组中选出符合我要求的元素做进一步使用,但正则验证莫名的失效不通过,坑位代码片段如下 测试地址

    var reg = /[.{32}]/img;
    var list = [
      '[c5b0fa7544d04e3ba2d22f608dc36497]',
      '[c5b0fa7544d04e3ba2d22f608dc36498]',
      '[c5b0fa7544d04e3ba2d22f608dc36499]',
      '[c5b0fa7544d04e3ba2d22f608dc36490]'
    ];
    var resultList = list.filter(function(item) {
      return reg.test(item);
    });
    console.log(resultList);
    // 输出["[c5b0fa7544d04e3ba2d22f608dc36497]", "[c5b0fa7544d04e3ba2d22f608dc36499]"]
    

    Why

    当正则加了g修饰符后,执行一次正确匹配后,会记录上一次匹配完的位置,属性为lastIndex。

    解决方案

    • 方案1:每次都重写一个正则,修改代码如下 测试地址:
    var list = [
      '[c5b0fa7544d04e3ba2d22f608dc36497]',
      '[c5b0fa7544d04e3ba2d22f608dc36498]',
      '[c5b0fa7544d04e3ba2d22f608dc36499]',
      '[c5b0fa7544d04e3ba2d22f608dc36490]'
    ];
    var resultList = list.filter(function(item) {
      return /[.{32}]/img.test(item);
    });
    console.log(resultList);
    
    • 方案2: 每次开始匹配前先重置下lastIndex值,示例代码如下 测试地址
    var reg = /[.{32}]/img;
    var list = [
      '[c5b0fa7544d04e3ba2d22f608dc36497]',
      '[c5b0fa7544d04e3ba2d22f608dc36498]',
      '[c5b0fa7544d04e3ba2d22f608dc36499]',
      '[c5b0fa7544d04e3ba2d22f608dc36490]'
    ];
    var resultList = list.filter(function(item) {
      reg.lastIndex = 0;
      return reg.test(item);
    });
    console.log(resultList);
    
    • 方案3:对于这种test方法无需加上g修饰符,也就不会有上面说的问题了。
  • 相关阅读:
    致5年后的自己
    基础知识回顾——属性
    基础知识回顾——类和对象
    基础知识回顾——面向对象编程
    基础知识回顾——函数
    基础知识回顾——流程控制
    基础知识回顾——列表和字典
    基础知识回顾——元组和字符串
    基础知识回顾——通用序列操作
    XPath Checker和Firebug安装与使用
  • 原文地址:https://www.cnblogs.com/xwwin/p/13564494.html
Copyright © 2011-2022 走看看