为什么JavaScript RegExp.test()方法表现为切换?

Joh*_*her 19 javascript regex

任何人都可以解释为什么alert()以下JavaScript代码被解雇?它似乎是RegExp.test()方法中的一个错误,它会在每次运行该方法时反转其先前的决定.我正在使用IE7.

我找到了一个看似坚固的替代品,string.search(regex)而不是使用该方法.但是,我很好奇是否有人知道这件事.

  var styleHasWidthRegex = /\bwidth\s*\:/ig;
  var styleText = "WIDTH: 350px";
  var result1 = styleHasWidthRegex.test(styleText);
  var result2 = !styleHasWidthRegex.test(styleText);
  if (result1 == result2) {
    alert("This should never happen!");
  }
Run Code Online (Sandbox Code Playgroud)

Sho*_*og9 45

你的正则表达式设置了global(g)标志.每次执行时,它都会更新一个内部索引(lastIndex属性),指定它停止的位置,并在下一次开始搜索该点.

当然,你并不是真的想要它 - 你希望它每次都从头开始.所以抛弃g国旗.

另请参见:不一致的javascript逻辑行为