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


var re = /null/g;
re.test('null null');
//> true
re.test('null null');
//> true
re.test('null null');
//> false

什么!?!?

我尝试在Chrome,Firefox,Safari中进行测试。用RegexP构造函数使用的Regex,但无济于事。

为什么会发生这种情况?

js bin带有其他演示

全局正则表达式(使用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

我会考虑更多,以弄清楚为什么会发生这种情况。但是您应该从正则删除" G"。这是不必要的,可以解决问题。

相关内容

  • 没有找到相关文章

最新更新