详谈lastIndex对正则结果的影响

转载  2017-11-10   投稿:jingxian   我要评论

下面小编就为大家带来一篇详谈lastIndex对正则结果的影响。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前言

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

let reg = /[\d]/g
//undefined
reg.test(1)
//true
reg.test(1)
//false

lastIndex

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

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

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

解决

1、不使用 g 修饰符

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

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

以上这篇详谈lastIndex对正则结果的影响就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 用正则按最后一个"_"分割"字符

    用正则按最后一个"_"分割"字符

    用正则按最后一个"_"分割"字符...
    2007-05-05
  • 正则中的圆括号()的用途详解

    正则中的圆括号()的用途详解

    正则表达式中的圆括号的作用是对字符进行分组,并保存匹配的文本。今天我们就来详细探讨下正则中的圆括号()的用途,希望对大家学习正则有所帮助。
    2015-04-04
  • Email正则表达式日常整理大全

    Email正则表达式日常整理大全

    正则表达式在项目中经常会用到,特别email邮箱验证在注册用户信息时经常是必填项,下面由脚本之家小编给大家分享Email正则表达式日常整理,需要的朋友可以参考下
    2015-09-09
  • 正则表达式模式修正符(/ies)

    正则表达式模式修正符(/ies)

    下面列出了当前在 PCRE 中可能使用的修正符。括号中是这些修正符的内部 PCRE 名。修正符中的空格和换行被忽略,其它字符会导致错误。
    2010-08-08
  • 用正则删除不包含某个字符串的行的代码

    用正则删除不包含某个字符串的行的代码

    这个需求发生在分析apache日志的时候。在日志中发现了一个比较可疑的ip,出现频率颇高,但每天的日志有几百万行,如何从中几百万行中找出需要的数据来进行分析呢?
    2009-09-09
  • PHP正则表达式抓取某个标签的特定属性值的方法

    PHP正则表达式抓取某个标签的特定属性值的方法

    这篇文章主要介绍了PHP正则表达式抓取某个标签的特定属性值的方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • asp正则过滤重复字符串的代码

    asp正则过滤重复字符串的代码

    asp下过滤重复字符串的代码,有时候我们需要过滤一些重复的字符串,下面的代码即可解决这个问题
    2008-06-06
  • python 正则表达式 re.sub & re.subn

    python 正则表达式 re.sub & re.subn

    正则表达式一个比较常见的用途是找到所有模式匹配的字符串并用不同的字符串来替换它们。sub方法提供一个替换值,可以是字符串或函数,和一个要被处理的字符串。这篇文章主要介绍了python 正则表达式 re.sub & re.subn,需要的朋友可以参考下
    2017-12-12
  • 正确使用带有"g"标记的javascript正则表达式

    正确使用带有"g"标记的javascript正则表达式

    javascript正则表达式是对字符串执行模式匹配的强大工具。正确使用它会给我们的工作带来很大的便利。可是有些地方由于我们没有太注意或者根本不理解,就会遇到不可预料的麻烦。
    2009-05-05
  • editplus EmEditor和searchandreplace正则表达式

    editplus EmEditor和searchandreplace正则表达式

    掌握下面的正则方便我们快速的批量处理文本替换。
    2009-07-07

最新评论