【问题标题】:Why is the JavaScript RegExp.test() method behaving as a toggle? [duplicate]为什么 JavaScript RegExp.test() 方法表现为切换? [复制]
【发布时间】:2009-05-21 19:32:41
【问题描述】:

谁能解释为什么下面 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!");
  }

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

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

    当然,你并不是真的想要那样——你希望它每次都从头开始。所以放弃g 标志。

    另见:Inconsistent javascript logic behavior

    【讨论】:

    • 感谢您的理解。
    • 非常有趣。我不知道。
    • 没问题,约翰。我第一次看到它时花了我一段时间!
    • ....你太棒了!今天学习一些新东西:D
    • 来这里投票。谢谢!
    【解决方案2】:

    在这种情况下,无论如何你都应该需要一个全局标签,因为在 css 声明中,一个属性只能声明一次。

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 2016-12-24
      相关资源
      最近更新 更多