为什么带g的正则表达式测试字符串结果会交替?
let r = /^[a-zA-Z0-9\u4e00-\u9fa5]+$/gr.test('中文')
true
r.test('中文')
false
r.test('aaa')
true
r.test('aaa')
false
let r = /^[a-zA-Z0-9\u4e00-\u9fa5]+$/
undefined
r.test('aaa')
true
r.test('aaa')
true
r.test('中文')
true
r.test('中文')
回答:
首先正则表达式是个对象,r.test
其实不是个纯函数,g代表r.global
,表示你要匹配全部结果,而一个test只会返回一个结果,所以带g了以后,执行test方法,正则会认为你是要判断r.lastIndex
后面的结果是否满足条件,而上一次r.test('中文')
之后,r.lastIndex
后移了两位。你console.dir打印正则表达式r会发现下面有个lastIndex,这个是你用带g的表达式的test方法进行判断时的起始位置
以上是 为什么带g的正则表达式测试字符串结果会交替? 的全部内容, 来源链接: utcz.com/p/938431.html