代码之家  ›  专栏  ›  技术社区  ›  KJ Saxena

一个奇怪的正则表达式问题

  •  1
  • KJ Saxena  · 技术社区  · 15 年前

    以下代码导致lastindex的“未定义”:

    var a = /cat/g;
    var l = "A test sentence containing cat and dog.";
    var r = a.exec(l);
    
    document.write(r.lastIndex);
    

    但是,它对于r.index(和r.input)非常有效。

    我正在使用火狐。有人有线索吗?

    编辑:好的,上面的代码在IE中工作得很好!此外,在火狐中,如果不是在第5行调用r.lastindex,而是调用a.lastindex,那么它将工作得很好。似乎firefox不会在结果中返回lastindex属性,而是只为调用exec()的模式设置属性。有趣的是IE同时设置了两个。

    3 回复  |  直到 15 年前
        1
  •  4
  •   NickFitz    15 年前

    这是微软决定将一些东西添加到该语言中,并表现得好像它应该在那里一样的地方之一。谢天谢地,他们现在正在清理自己的行为,记录下这些胡言乱语。

    要清楚:根据 ECMAScript Language Specification 3rd Edition (PDF,705KB)。

    IE是 正确;它的行为是专有扩展。没有理由相信任何其他浏览器都会支持这种特定于IE的行为。现在肯定不是。见 JScript Deviations from ES3 (Microsoft Corporation的Pratap Lakshman提供的PDF,580KB)第4.6节了解与规范的这种特殊偏差的更多信息,包括对其他浏览器不支持的测试。

    还请注意,将来IE甚至可能不支持这一点:在IE8-in-IE8-mode中,默认情况下会禁用许多与IE-css相关的专有机制,而JScript的未来实现可能会找到一个同样禁用该语言扩展的原因。

        2
  •  4
  •   Gumbo    15 年前

    lastIndex 是的属性 RegExp object . 所以试试这个:

    a.lastIndex
    
        3
  •  0
  •   Svante    15 年前

    为了避免所有的怪事,试试这个

    var a = /cat/g;
    var l = "A test sentence containing cat and dog.";
    var r = a.exec(l);
    var lastIndex = (r!=null) ? l.indexOf(r[0])+r[0].length : 0;
    

    此处使用: http://www.pagecolumn.com/tool/regtest.htm