代码之家  ›  专栏  ›  技术社区  ›  John Fisher

为什么JavaScript RegExp.test()方法的行为是切换?[副本]

  •  18
  • John Fisher  · 技术社区  · 15 年前

    有人能解释为什么会这样吗 alert() RegExp.test()

    我找到了一个看起来很坚固的替代品,使用 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 回复  |  直到 6 年前
        1
  •  45
  •   Community c0D3l0g1c    4 年前

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

    当然,你并不是真的想要这样——你希望每次都从一开始就开始。所以,抛开这一切吧 G 旗帜

    另见: Inconsistent javascript logic behavior

        2
  •  0
  •   Dmitri Farkov    15 年前