一个关于JS正则匹配的踩坑记录

 更新时间:2021年04月13日 11:22:42   作者:我叫宋大宗  
这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

最近发现在JS里的正则匹配有一个坑,而且当时很莫名奇妙,一度让我怀疑出现了灵异事件。

下面是踩坑代码

   var str=["二七1","二七2","金水","二七3","二七4","二七5"]
        var reg=new RegExp("二七","g");
        for(var i=0;i<str.length;i++){
            if(reg.test(str[i])){
                console.log(str[i])
            }
        }

我用正则对str进行全局匹配,当满足的时候打印出来,于是乎我就得到了这个

莫名的少了两个,然后我对它进行单独的判断

      var str=["二七1","二七2","金水","二七3","二七4","二七5"]
        var reg=new RegExp("二七","g");
        for(var i=0;i<str.length;i++){
            if(reg.test(str[i])){
                console.log(str[i])
            }
            if(i==1){
                console.log(reg.test(str[i]))
            }
            if(i==4){
                console.log(reg.test(str[i]))
            }
        }

于是我得到了这个

又少了一个,但可以看到之前所缺失的两个是满足正则判断的,然后我在网上找到了下面这段话:

如果在正则匹配中成功匹配到字符串,lastIndex会被设置为第一次匹配到的字符串的位置,以作为字符串全局匹配下次检索的起点,如果后面字段还能匹配成功,那么lastIndex会被反复重新赋值,直到匹配失败,它会被重置为0;

但我去请教了一下我的老师,他告诉我的是匹配到后是将lastIndex+1返回过去,也就是当我第一次匹配到后,lastIndex是2,这个2是字符串里的下标,而不是数组的下标,所以在对str[1]进行判断时是从字符串下标为2的开始,而不是从0开始,所以第二次判断为false,这时匹配失败,lastIndex被置为0,所以第三次可以匹配成功。

所以在判断结果为true后将lastIndex置为0,这样数据就正常了。

数据就正常了。

总结

如果使用全局匹配,那么在每一次查到后将lastIndex置零,或者不使用全局匹配,直接匹配即可。

这里奉上网友的总结:

lastIndex从字面上来讲就是最后一个索引,实际上它的意思是正则表达式开始下一次查找的索引位置,第一次的时候总是为0的,第一次查找完了的时候会把lastIndex的值设为匹配到得字符串的最后一个字符的索引位置加1,第二次查找的时候会从lastIndex这个位置开始,后面的以此类推。如果没有找到,则会把lastIndex重置为0。要注意的是,lastIndex属性只有在有全局标志正则表达式中才有作用,如果我们把上面代码中正则表达式的g标志去掉,那么三次弹出的就都是true了。

需要的朋友可以参考下,到此这篇关于一个关于JS正则匹配的踩坑记录的文章就介绍到这了,更多相关JS正则匹配踩坑内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js实例入门(简单展开或关闭)

    js实例入门(简单展开或关闭)

    简直的展开或关闭
    2008-11-11
  • Dom加载让图片加载完再执行的脚本代码

    Dom加载让图片加载完再执行的脚本代码

    当大家使用window.onload执行一个函数时,必须要等到页面上的图片等信息全部加载完毕之后才执行的。但很多时候图片的数量比较多,所以需要很多时间下载。更令人尴尬的是,当网页文档(或者说Dom)已经加载完毕,而图片尚未加载完毕,很多用户已经开始浏览网页,但这时很多由window.onload所触发的函数不能执行,这就导致一部分功能不能完美地给用户使用,更严重的是会给用户留下不好的印象!
    2008-05-05
  • JS+CSS实现淡入式焦点图片幻灯切换效果的方法

    JS+CSS实现淡入式焦点图片幻灯切换效果的方法

    这篇文章主要介绍了JS+CSS实现淡入式焦点图片幻灯切换效果的方法,实例分析了javascript操作图片、css等元素实现幻灯片的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • js实现漂亮的星空背景

    js实现漂亮的星空背景

    这篇文章主要为大家详细介绍了js实现漂亮的星空背景,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Javascript中的async函数详解

    Javascript中的async函数详解

    这篇文章主要为大家详细介绍了Javascript中的async函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 详解浏览器渲染页面过程

    详解浏览器渲染页面过程

    这篇文章主要介绍了详解浏览器渲染页面过程的相关资料,需要的朋友可以参考下
    2017-02-02
  • 简单了解JavaScript中常见的反模式

    简单了解JavaScript中常见的反模式

    这篇文章主要介绍了简单了解JavaScript中常见的反模式,反模式 是指对反复出现的设计问题的常见的无力而低效的设计模式,俗话说就是重蹈覆辙。 这篇文章描述了 JavaScript 中常见的一些反模式,以及避免它们的办法。,需要的朋友可以参考下
    2019-06-06
  • 引用其它js时如何同时处理多个window.onload事件

    引用其它js时如何同时处理多个window.onload事件

    引用其它js时,其js却使用了window.onload事件,这样的话,引入的页面的onload事件就有可能执行不了,那么该如何解决呢?祥看下文
    2014-09-09
  • Javascript 遮罩层和加载效果代码

    Javascript 遮罩层和加载效果代码

    这篇文章介绍了Javascript 遮罩层和加载效果代码,有需要的朋友可以参考一下
    2013-08-08
  • 深入理解JavaScript系列(2) 揭秘命名函数表达式

    深入理解JavaScript系列(2) 揭秘命名函数表达式

    网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点
    2012-01-01

最新评论