任何人都可以解释一下,为什么本地正则表达式变量和非本地正则表达式变量有不同的输出。
var regex1 = /a|b/g;
function isAB1() {
return regex1.test('a');
}
console.log(isAB1()); // true
console.log(isAB1()); // false
console.log(isAB1()); // true
console.log(isAB1()); // false
function isAB2() {
var regex2 = /a|b/g;
return regex2.test('a');
}
console.log(isAB2()); // true
console.log(isAB2()); // true
console.log(isAB2()); // true
console.log(isAB2()); // true
我为同一个here创建了JSFiddle
。
答案 0 :(得分:6)
您为正则表达式提供了g
标志,这意味着它将全局匹配结果。通过这样做,您明确要求您的正则表达式保持其先前匹配的状态。
var regex1 = /a|b/g;
> regex1.lastIndex
0
> regex1.test('a');
true
> regex1.lastIndex
1
> regex1.test('a');
false
如果您移除g
,您将获得您期望的结果。
您可以检查表达式.lastIndex
属性是否匹配。