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

时间:2009-05-21 19:32:41

标签: javascript regex

有人可以解释为什么以下JavaScript代码中的alert()会被解雇吗?它似乎是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!");
  }

2 个答案:

答案 0 :(得分:44)

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

当然,你真的不想那样 - 你希望它每次都从头开始。所以抛弃了g旗帜。

另见:Inconsistent javascript logic behavior

答案 1 :(得分:0)

在这种情况下,您仍然需要一个全局标记,因为在css声明中,属性应该只声明一次。