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修饰符,也就不会有上面说的问题了。
  • 相关阅读:
    学习进度汇总
    session系列(一)--之--session 与cookie
    遇到一个合适的人到底有多难
    Spring Bean学习创建及使用<二>
    Spring Bean学习创建及使用<一>
    转发:Java对象及其引用
    多线程分配线程的实现方案:CountDownLatch类
    java基础知识
    java静态标示符static详解
    淘宝TAE平台定时任务包的部署步骤
  • 原文地址:https://www.cnblogs.com/xwwin/p/13564494.html
Copyright © 2011-2022 走看看