/null/g.test(' null null')出现意外的正则表达式行为

时间:2017-03-11 04:04:38

标签: javascript regex null

var re = /null/g;

re.test('null null');
//> true

re.test('null null');
//> true

re.test('null null');
//> false

什么!?!?

我尝试在Chrome,Firefox,Safari中进行测试。 使用RegExp构造函数的正则表达式,但无济于事。

为什么会这样?

JS Bin with additional demo

2 个答案:

答案 0 :(得分:4)

全局正则表达式(使用g标志的表达式)是特殊的。如果多次在同一个字符串上调用它们,它们会搜索连续的匹配项。由于您的测试字符串恰好包含null的两个匹配项,因此第三次调用RegExp#test会返回false(无法找到连续的第三个匹配项)。

要解决此问题,您可以放弃g标记,如下所示:



var re = /null/

console.log(re.test('null null')) //=> true
console.log(re.test('null null')) //=> true
console.log(re.test('null null')) //=> true




答案 1 :(得分:0)

我会更多地考虑这个,以弄清楚为什么会这样。但你应该删除" g"来自你的正则表达式。这是不必要的,并将解决问题。