为什么将Javascript RegExp测试函数与标志一起使用时每次都会给出不同的结果?

时间:2019-11-19 18:07:20

标签: javascript

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

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

很明显,我在这里有些不了解。但是呢?

1 个答案:

答案 0 :(得分:1)

g标志告诉RegExp对象记住上一次比赛的位置,并在下次尝试进行比赛(在这种情况下为测试)时从那里继续。