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

时间:2009-08-25 08:55:05

标签: javascript regex

以下代码导致lastIndex为“undefined”:

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)。

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

编辑:好的,上面的代码在IE中完美运行!此外,在Firefox中,如果不是在第5行调用r.lastIndex,它将完美地工作,调用a.lastIndex。 Firefox似乎没有在结果中返回lastIndex属性 - 而是仅为调用exec()的模式设置属性。 IE很有趣。

3 个答案:

答案 0 :(得分:4)

lastIndexRegExp object的属性。所以试试这个:

a.lastIndex

答案 1 :(得分:4)

这是微软决定在语言中添加一些东西并且表现得好像应该在那里的地方之一。值得庆幸的是,他们现在正在清理他们的行为并记录这些废话。

要明确:根据 ECMAScript Language Specification 3rd Edition (PDF,705KB),Firefox是正确的。

IE 正确;它的行为是专有扩展。没有理由相信任何其他浏览器都会支持这种特定于IE的行为。目前肯定不是。请参阅 JScript Deviations from ES3 (PDF,580KB,由微软公司的Pratap Lakshman撰写)第4.6节,了解有关此特定偏离规范的更多信息,包括显示不支持其他浏览器的测试。

另请注意,以后IE甚至可能不会支持这种情况:IE8-in-IE8模式下默认禁用了许多专有的IE CSS相关机制,未来的JScript实现可能会找到理由同样禁用此扩展语言。

答案 2 :(得分:0)

为避免一切奇怪,请试试这个

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