[JavaScript] js中全局标识正则表达式的lastIndex属性
2024-09-05 16:18:45
在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
最新文章
- lua的C库
- [ruby on rails] 跟我学之(2)HelloWorld
- PHP 学习笔记 01
- java中的接口回调
- Oracle并行更新的两种方式(merge/update内联视图)
- aliyun云服务器硬件性能测试
- windows 不能在 本地计算机 启动 Apache
- Spark SQL源代码分析之核心流程
- 小技巧-C#文本快速删除空行
- Android核心安全机制(一)
- 关于DOM的事件操作
- PHP大神必须养成的十大优良习惯
- hdu 1160 FatMouse's Speed (最长上升子序列+打印路径)
- java 分隔函数split(";";,-1)的用途
- mac/Linux源码安装TensorFlow
- element-ui Carousel 走马灯源码分析整理笔记(十一)
- 从零开始一起学习SLAM | 三维空间刚体的旋转
- oracle.exe 内存占用过大
- html标签SEO规范
- ELK篇---------elasticsearch集群安装配置
热门文章
- 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
- js---if判断的几种写法
- Multitenancy
- static和export有什么关系
- Qt5.QtCreator_屏蔽警告
- Redis Sentinel 高可用部署实践集群
- SQL Server 从Excel导入到数据库操作遇到的科学计数法问题
- 小白的C++之路——简易计算机
- AVR单片机教程——EasyElectronics Library v1.3手册
- Linux下C++酒店管理系统