为什么带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


![正则表达式中 [\s\S]* 什么意思 居然能匹配所有字符 [] 不是范围描述符吗?](/wp-content/uploads/thumbs/270159_thumbnail.jpg)





