首页 > 解决方案 > 为什么javascript RegExp测试函数每次与标志一起使用时都会给出不同的结果?

问题描述

如果我使用 RegExp test(),它会第一次给出正确的答案,但之后它会返回相反的结果(如果找到匹配项),如果不是,则返回 false:

let regex = new RegExp('bird|dog', 'g')

console.log(regex.test('Imma bird')) // output: true
console.log(regex.test('Imma dog')) // output false !
console.log(regex.test('Imma dog')) // output true
console.log(regex.test('Imma bird')) // output false !?
console.log(regex.test('Imma bird')) // output true
console.log(regex.test('Imma bird')) // output false ??
console.log(regex.test('Imma believer')) // output false
console.log(regex.test('Imma believer')) // output false
console.log(regex.test('Imma believer')) // output false

如果我不使用 'g' 限定符,一切都会按预期工作:

let regex = new RegExp('bird|dog')

console.log(regex.test('Imma bird')) // output true
console.log(regex.test('Imma bird')) // output true
console.log(regex.test('Imma believer')) // output false
console.log(regex.test('Imma believer')) // output false

显然,这里有一些我不明白的地方。但是什么?

标签: javascript

解决方案


g标志告诉RegExp对象记住最后一次匹配的位置,并在下次尝试匹配(或测试,在这种情况下)时从那里恢复。


推荐阅读