为什么带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('中文')
阅读 1.1k
1 个回答

首先正则表达式是个对象,r.test其实不是个纯函数,g代表r.global,表示你要匹配全部结果,而一个test只会返回一个结果,所以带g了以后,执行test方法,正则会认为你是要判断r.lastIndex后面的结果是否满足条件,而上一次r.test('中文')之后,r.lastIndex后移了两位。你console.dir打印正则表达式r会发现下面有个lastIndex,这个是你用带g的表达式的test方法进行判断时的起始位置
image.png
image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题