需要重复使用同一个正则表达式匹配字符串时,千万别加/g
!
问题描述
- 需要用同一个正则重复匹配不同的值是否符合要求,第一遍啥事没有,第二遍啥啥都对,就是匹配值不对,前后顺序调换还是后面的不对
例子
1 | let reg = /^[1-9]\d*$/g // 大于0的整数 |
结论
- 需要重复使用同一个正则表达式匹配字符串时,千万别加
g
! - 因为**
/g
代表全局匹配**,所以判断正则时内部是有一个lastIndex来记录最后匹配的位置.当重复调用的时候,会接着上次的lastIndex继续匹配,故而将导致判断出错.
解决方法
- 方法1:去掉
/g
- 方法2:第二次匹配前,手动将lastIndex置0,以上面的例子来说:
reg.lastIndex()=0
即可