为什么带g的正则表达式测试字符串结果会交替?

let r = /^[a-zA-Z0-9\u4e00-\u9fa5]+$/g

r.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的正则表达式测试字符串结果会交替?
为什么带g的正则表达式测试字符串结果会交替?

以上是 为什么带g的正则表达式测试字符串结果会交替? 的全部内容, 来源链接: utcz.com/p/938431.html

回到顶部