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('中文')
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('中文')
13 回答12.9k 阅读
8 回答2.7k 阅读
2 回答5.1k 阅读✓ 已解决
7 回答2.1k 阅读
5 回答1.3k 阅读
2 回答1.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
首先正则表达式是个对象,


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