千家信息网

lastIndex对正则表达式结果的影响有哪些

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍了lastIndex对正则表达式结果的影响有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言今天遇到一个问题,用
千家信息网最后更新 2026年10月31日lastIndex对正则表达式结果的影响有哪些

这篇文章主要介绍了lastIndex对正则表达式结果的影响有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

前言

  今天遇到一个问题,用正则表达式去检查同一个字符串时,交替返回true和false。无奈之下,重新翻了翻权威指南,发现罪魁祸首原来是lastIndex。可在控制台尝试下

let reg = /[\d]/g//undefinedreg.test(1)//truereg.test(1)//false

lastIndex

  lastIndex在权威指南中是如下解释:它是一个可读/写的整数。如果匹配模式带有g修饰符,这个属性存储在整个字符串中下次索引的开始位置,这个属性会被exec()和test()用到。还是上面的例子,观察下lastIndex属性

let reg = /[\d]/g   //有修饰符g//undefinedreg.lastIndex//0reg.test(1)      //truereg.lastIndex   //匹配一次后,lastIndex改变//1reg.test(1)    //从index 1 开始匹配//falsereg.lastIndex//0reg.test(1)//truereg.lastIndex//1

  第一次使用test()匹配成功后,lastIndex被设为匹配到的结束位置,就是1;第二次再test()时,从index 1 开始匹配,匹配失败,lastIndex重置为0 。这样就造成了匹配结果与预期不符

解决

  1、不使用 g 修饰符

reg = /[\d]////[\d]/reg.test(1)//truereg.test(1)//truereg.lastIndex//0reg.test(1)//truereg.lastIndex0

  2、test()之后手动设置lastIndex = 0

浅析正则表达式对象lastIndex属性

js中正则表达式的使用方式有两种,一种是正则表达式对象的方法,一种是字符串对象的方法,前者有exec(str)、test(str)两个方法,后者有match(regexp)、replace(regexp)、search(regexp)、split(search)四个方法。当作为正则表达式对象的方法使用时,要特别注意它的lastIndex属性。

var regexp = /abcd/g;var str = 'abcdefg';alert(regexp.test(str)); //truealert(regexp.test(str)); //falsealert(regexp.test(str)); //true

上面这段代码运行的结果分别是弹出true、false、true,考虑到用的是同一个正则模式,是不是让人有点迷糊?

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

exec()方法同样是如此,exec()方法返回的是一个数组,数组的第一个元素是匹配到的字符串,之后的元素则分别对应匹配到的字串,也就是正则表达式中用括号括起来的那些。如果使用exec()方法的正则表达式没有全局标志,则只会匹配第一个,如果正则表达式有全局标志,则可以循环使用exec()来得到所有的匹配,直到exec()返回null为止,也就是找不到匹配了。这里能够循环使用同一个正则表达式的exec()方法,靠的就是lastIndex,因为带全局标志的正则表达式每次匹配后都会更新lastIndex的值作为下次查找匹配的起点。

最后要说明的是字符串的正则方法里lastIndex属性是不起作用的,不管正则模式是不是全局的。

感谢你能够认真阅读完这篇文章,希望小编分享的"lastIndex对正则表达式结果的影响有哪些"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

正则 表达式 方法 属性 字符 字符串 位置 全局 对象 标志 结果 篇文章 索引 就是 时候 模式 第一次 影响 也就是 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网佳科技有限公司 北京互联网科技有限公司 万易互联网科技 碳银互联网科技 青海省互联网新科技 银川新华互联网科技学校地址 天速互联网络科技有限公司 新华互联网科技2019 宁夏科技产业互联网案例 速维有品互联网信息科技(苏州)有限公司 互联网科技研发水平 工业互联网等科技实现智能化赋能 江苏苏星互联网科技有限公司 工业互联网科技创业 广州互联网高科技取餐柜 郑州欣桑互联网科技有限公司 万物互联网智能科技 云南互联网科技学费 科技和互联网行业的特点 互联网科技博主张洲 互联网科技活动banner 科技与互联网 河南真二互联网科技有限公司 润盈互联网科技 互联网科技公司介绍 老年人脱离互联网科技的作文 玖二柒互联网科技公司待遇 阿里巴巴算科技企业还是互联网 杭州科技互联网公司有哪些 广州全民伙伴互联网科技有限公司
0