在JavaScript中使用正则表达式时,遇到一个坑:第一次匹配是true,第二次匹配是false。

因为在带全局标识"g"的正则表达式对象中,才有“lastIndex” 属性,该属性用于指定下次匹配的起始位置。

例如:

var pattern1 = new RegExp("1[0-9]{10}", "g"); // 带全局标识
var pattern2 = new RegExp("^1[0-9]{10}$"); // 不带全局标识

带全局标识的正则pattern1 ,在字符串中匹配到子串之后,pattern1.lastIndex的值并没有立刻被重置为0,而是会接着上一次匹配的位置继续向后寻找是否有匹配的值,这就会出现问题:“一个匹配的字符串第一次匹配为true,第二次匹配为false”。

有两种解决方法:
(1)去掉全局标识"g",用[^][$]首尾限定符包裹的字符串定义正则表达式;
(2)有些情况下必须保留全局标识"g",可以在匹配(test)过一次之后,手动将lastIndex的值重置为0,如:

pattern1.lastIndex = 0

最新文章

  1. lua的C库
  2. [ruby on rails] 跟我学之(2)HelloWorld
  3. PHP 学习笔记 01
  4. java中的接口回调
  5. Oracle并行更新的两种方式(merge/update内联视图)
  6. aliyun云服务器硬件性能测试
  7. windows 不能在 本地计算机 启动 Apache
  8. Spark SQL源代码分析之核心流程
  9. 小技巧-C#文本快速删除空行
  10. Android核心安全机制(一)
  11. 关于DOM的事件操作
  12. PHP大神必须养成的十大优良习惯
  13. hdu 1160 FatMouse's Speed (最长上升子序列+打印路径)
  14. java 分隔函数split("",-1)的用途
  15. mac/Linux源码安装TensorFlow
  16. element-ui Carousel 走马灯源码分析整理笔记(十一)
  17. 从零开始一起学习SLAM | 三维空间刚体的旋转
  18. oracle.exe 内存占用过大
  19. html标签SEO规范
  20. ELK篇---------elasticsearch集群安装配置

热门文章

  1. django使用mysql出现警告Warning: (3135, "'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release
  2. js---if判断的几种写法
  3. Multitenancy
  4. static和export有什么关系
  5. Qt5.QtCreator_屏蔽警告
  6. Redis Sentinel 高可用部署实践集群
  7. SQL Server 从Excel导入到数据库操作遇到的科学计数法问题
  8. 小白的C++之路——简易计算机
  9. AVR单片机教程——EasyElectronics Library v1.3手册
  10. Linux下C++酒店管理系统