js中在循环中使用正则表达式遇到的小坑

Posted 天渺工作室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中在循环中使用正则表达式遇到的小坑相关的知识,希望对你有一定的参考价值。

1、基本数据类型和引用数据类型

ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型。
基本数据类型:Number、String、Boolen、Undefined、Null、Symbol、Bigint。
引用数据类型:也就是对象类型Object type,比如:对象(Object)、数组(Array)、函数(Function)、日期(Date)、正则表达式(RegExp)。

so正则表达式属于引用数据类型。

2、项目中在循环中使用正则


使用正则匹配111

    const regular = /111/g; // 匹配111
    console.log(regular.test(\'111\')); // true 匹配成功
    console.log(regular.test(\'111,111\')); // true 匹配成功

循环中使用正则的异常写法

    const regular = /111/g; // 匹配111
    const list = [
        \'111\',
        \'111\',
        \'111,111\',
        \'111,111\',
        \'111\',
        \'111\',
        \'111,111\',
        \'111,111\',
        \'111\',
        \'111\',
        \'111,111\',
        \'111,111\',
    ];
    list.forEach((element, index) => 
        // 异常写法
        console.log(\'log_________\' + regular.test(element));
    );    
    

打印还存在false。
原因:/111/g 这种写法看起来像string,但终究还是正则,正则属于引用型数据类型。引用型数据类型 传统意义中 需要我们"深拷贝"或者开辟新内存 new Object() 才能使其 内存指向独立出来,而不是让内存指向一直指向初始定义时的源头。

循环中使用正则的正确写法

    const regular = /111/g; // 匹配111
    const list = [
        \'111\',
        \'111\',
        \'111,111\',
        \'111,111\',
        \'111\',
        \'111\',
        \'111,111\',
        \'111,111\',
        \'111\',
        \'111\',
        \'111,111\',
        \'111,111\',
    ];
    list.forEach((element, index) => 
        // 正确写法 new RegExp的内存指向在循环过程中每次都单独开辟一个新的“对象”,不会和前几次的循环regular.test(xxx)改变结果而混淆
        // console.log(\'log_________\' + /111/g.test(element)); // 这样写当然也行
        console.log(\'log_________\' + new RegExp(regular).test(element));
    );    
    

打印OK。

java 使用正则表达式replace(redEx,replaceStr) 中遇到的问题

 

技术分享

今天在使用replaceAll()方法替换反斜杠时 发现这种写法不行 在js中可以 因为java中字符串\\u被解析为unicode码

只要加上\\\\[u]  正则中的方括号就可以了

技术分享

另外 如果直接写一个反斜杠也不行 在js中是可以的

以上是关于js中在循环中使用正则表达式遇到的小坑的主要内容,如果未能解决你的问题,请参考以下文章

fimo: 扫描motif时需留心的小坑

Robot Framework Regular Expression 正则表达式 处理String

js正则匹配总结

java 使用正则表达式replace(redEx,replaceStr) 中遇到的问题

循环通过 python 正则表达式匹配

检查while循环内的正则表达式条件(shell)