先看一个很有意思的例子:

 

用字面量的方式定义了一个正则表达式 /\w/g,再重复匹配字符串 ‘ab’ 的时候,出现了结果不唯一的现象。

很多新手都对这种现象感到困惑,难道是正则表达式不稳定吗?

接下来我们深入学习一下,Javascript中的RegExp对象。

RegExp对象的属性

  1. global:是否全文搜索,默认 false;

  2. ignore case : 是否大小写敏感,默认是 false;

  3. muitiline: 多行搜索,默认值是 false;

  4. lastIndex: 是当前表达式匹配内容的最后一个字符的下一个位置;

  5. source: 正则表达式的文本字符串,不包括修饰符。

前三条属性作为正则表达式的修饰符是只读属性,不可赋值更改,

关键是这个lastIndex 属性,使用exec或test方法时才被填入,直接反映到正则表达式对象中。

我们回到一开始的那个例子。

用 /\w/g 去匹配字符串 ‘ab’ 的时候,根据属性的描述,当前表达式匹配内容的最后一个字符的下一个位置(索引)。

把这个定义拆成三句话:

  1. 当前表达式匹配内容: 'a' ;

  2. 成功匹配内容的最后一个字符: 因为只有一个字符,所以最后一个字符还是 'a' ;

  3. 下一个位置:那就是 ’b‘ 。

所以第一次成功匹配后 正则表达式对象的 lastIndex 应该等于 1,然后用代码验证一下:

不难得出,正则全文匹配的时候并不是每一次都是从头开始的,有一个lastIndex属性记录了每次匹配开始的位置

到这里文章开头的问题就迎刃而解了,第三匹配的时候,lastIndex的值为2,而去匹配的字符串中没有索引为2的字符,自然test方法就返回false,

此时lastIndex会被重置为0,所以第四次的匹配结果又是true了。

最新文章

  1. 转载:《TypeScript 中文入门教程》 14、输入.d.ts文件
  2. 设置java web工程中默认访问首页的几种方式
  3. h5和h4区别图片
  4. 用Intent实现activity的跳转
  5. Java 代码性能优化总结
  6. SQLServerDBA十大必备工具---让生活轻松点(转)
  7. poj1850
  8. perl tk说明
  9. 从UIImage的矩阵变换看矩阵运算的原理
  10. 重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider
  11. 文档PDF开放
  12. 第3章Zabbix完整监控
  13. springcloud(九):配置中心和消息总线(配置中心终结版)
  14. hdu2242 考研路茫茫——空调教室
  15. Express内置方法
  16. entityVo对象与entity对象
  17. Python黑魔法 --- 异步IO( asyncio) 协程
  18. 对啊英语音标---二、ghywr这些辅音怎么发音
  19. ubuntu 关闭 笔记本键盘背景灯
  20. Docker(3):Dockerfile介绍及简单示例

热门文章

  1. StampedLock原理
  2. sql遍历查询结果sql循环查询结果集sql循环查询
  3. 设置django在linux后台运行&查看端口使用
  4. 5分钟构建无服务图片鉴黄web应用(基于FunctionGraph)
  5. [ZJOI2009]狼和羊的故事 BZOJ1412
  6. kuangbin专题十二 HDU1074 Doing Homework (状压dp)
  7. P3167 [CQOI2014]通配符匹配 题解
  8. 使用css实现垂直居中
  9. 小a与黄金街道(欧拉函数+快速幂)
  10. JDK Throwable