RegExp JavaScript错误测试

时间:2015-08-20 16:47:00

标签: javascript regex testing

这种情况是错误?

执行萤火虫

altern = /raeeoCott/ig // 


for(var h = 0; h<3; h++)
 for(var i = 0; i<5; i++)
  if(altern.test('raeeocott'))
    console.log('ddd')


h=1 :: (8 true); ?????

// 5 * 3 = 15 != 8 

为什么会这样?

1 个答案:

答案 0 :(得分:5)

这种情况正在发生,因为您在正则表达式中包含了g标记。该标志在调用.test()之间保持状态。成功匹配后,下一次尝试将尝试匹配源字符串的其余部分,并且匹配将失败。所以你得到8次成功的比赛,穿插失败。

第一次拨打.test()成功。正则表达式对象“记住”它应该在匹配字符串结束后开始,这将是源字符串的最后一部分。这在下一次迭代时将不匹配,但由于尝试用完了源字符串的结尾,正则表达式将重置为位置0.然后,下一次尝试将成功,并且结束像那样。

简短版本:摆脱g旗帜。