代码之家  ›  专栏  ›  技术社区  ›  El Ronnoco

异常的javascript regex结果,请解释!

  •  1
  • El Ronnoco  · 技术社区  · 14 年前

    我在VS2005中开发,在我的页面中有一些JS代码。我在遇到问题的特定循环中设置了一个断点。这是我和IDE的小对话--

    ? ind
    /d/g
    ? ind.test("d")
    true
    ? ind.test("dtn")
    false
    ? ind.test("dtn")
    true
    ? ind.test("dtn")
    false
    ? ind.test("dtn")
    true
    ? ind.test("dtn")
    false
    

    为什么测试在对与错之间交替进行? ind 是我的regex吗?我是这样设置的:

    case "datetime" : ind = new RegExp("d","g");break;
    

    更新

    所以我把我的声明改为

    ind = /d/;
    

    即省略全局修饰符。我想那是

    ind = RegExp("d");
    

    也同样有效。

    但问题仍然存在。为什么全局修改器导致 test 在真与假之间交替?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Ivo Wetzel    14 年前

    https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/test

    ind.test("d")
    

    lastIndex

    ind.lastIndex
    >> 0
    ind.test("d")
    >> true
    ind.lastIndex
    >> 1
    ind.test("d")
    >> false
    
        2
  •  3
  •   Gumbo    14 年前

    re.test(str) re.exec(str) != null specification of RegExp.prototype.test(string)

    exec lastIndex 0

    g “标记,您可以使用 执行程序 方法多次查找同一字符串中的连续匹配项。执行此操作时,搜索将从以下子字符串开始: str 由正则表达式的 最新索引 财产( test 也将推进 最新索引 财产)。

    这就是为什么你会得到这个奇怪的结果。