???这个结果是bug还是其他原因,不应该全部为true吗,
怀疑人生了
方便测试代码贴出来了
let reg = /[A-Z]+/g
let data = ['A','B','C','D','E'];
data.forEach((element,index)=>{
console.log(`${reg}.test('${element}')`,reg.test(element))
});
// /[A-Z]+/g.test('A') true
// /[A-Z]+/g.test('B') false
// /[A-Z]+/g.test('C') true
// /[A-Z]+/g.test('D') false
// /[A-Z]+/g.test('E') true
4 回复
找到问题了/g的原因 如果正则表达式设置了全局标志,test() 的执行会改变正则表达式 lastIndex属性。连续的执行test()方法,后续的执行将会从 lastIndex 处开始匹配字符串,(exec() 同样改变正则本身的 lastIndex属性值).
下面的实例表现了这种行为:
var regex = /foo/g;
// regex.lastIndex is at 0 regex.test(‘foo’); // true
// regex.lastIndex is now at 3 regex.test(‘foo’); // false
👍👍
使用 regexp.test() 方法一定得知道 /g 模式的坑。 所以我基本禁用 test()
我之前也遇到过这个问题