Regex.test()给出了真正的错误顺序?

时间:2015-06-17 09:27:55

标签: javascript regex

任何人都可以解释一下,为什么本地正则表达式变量和非本地正则表达式变量有不同的输出。

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

1 个答案:

答案 0 :(得分:6)

您为正则表达式提供了g标志,这意味着它将全局匹配结果。通过这样做,您明确要求您的正则表达式保持其先前匹配的状态。

var regex1 = /a|b/g;

> regex1.lastIndex
0
> regex1.test('a');
true
> regex1.lastIndex
1
> regex1.test('a');
false

如果您移除g,您将获得您期望的结果。

您可以检查表达式.lastIndex属性是否匹配。