【问题标题】:RegExp JavaScript error test [duplicate]RegExp JavaScript 错误测试 [重复]
【发布时间】:2015-08-20 16:46:59
【问题描述】:

这种情况是错误的?

在萤火虫中执行

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 

为什么会这样?

【问题讨论】:

  • why is this happening? 为什么会发生这种情况?你预计会发生什么?
  • 用你的代码我得到 8 次 console.log('ddd')。这有什么问题吗?

标签: javascript regex testing


【解决方案1】:

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

第一次调用.test() 成功。正则表达式对象“记住”它应该在匹配字符串的末尾之后开始,这将是源字符串的末尾。这不会在下一次迭代中匹配,但是因为 attempt 用完了源字符串的末尾,正则表达式重置到位置 0。然后,下一次尝试将成功,并且结束就这样结束了。

短版:去掉g标志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2013-11-26
    相关资源
    最近更新 更多