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修饰符,也就不会有上面说的问题了。
  • 相关阅读:
    Tomcat压缩传输设置
    Spring事务的开启方式
    Transactional参数说明
    Java获取异常堆栈信息
    ElasticSearch的matchQuery与termQuery区别
    156-PHP strrpos和strripos函数
    155-PHP stripos函数
    154-PHP strpos函数
    153-PHP htmlentities函数
    152-PHP htmlspecialchars函数
  • 原文地址:https://www.cnblogs.com/xwwin/p/13564494.html
Copyright © 2011-2022 走看看