下面的javascript代码将正则表达式找到的匹配连接起来。正则表达式应该找到任何一个词或一组引文词。它似乎在FireFox和Chrome中工作得很好,但在IE中却不能正常工作(我只在IE8上测试过)。
var searchString = '';
var notString = 'dog cat "pirate ship"';
var matches = notString.match(/(\w+|"[^"]+")/ig);
for (i in matches) {
searchString += " NOT " + matches[i];
}
alert(searchString );正确的输出应该是:
不狗不猫不“海盗船”
但在IE8 IE8:
不狗猫“海盗船”不是狗不猫不是“海盗船”不是8不是21
任何关于如何使这个跨浏览器兼容的建议。
非常感谢,
发布于 2010-04-13 16:08:12
问题在于您使用了for...in语句。for...in语句将迭代对象的所有可枚举属性,它们实际上不适合迭代数组元素--在本例中,它是对以下属性的迭代:
matches.input
matches.0
matches.1
matches.2
matches.index
matches.lastIndex另见http://msdn.microsoft.com/en-us/library/7df7sf4x(VS.85).aspx
由match方法返回的数组具有三个属性:输入、索引和lastIndex。input属性包含整个搜索的字符串。index属性包含匹配子字符串在完整搜索字符串中的位置。lastIndex属性包含上次匹配中最后一个字符后面的位置。
使用适当的for语句代替:
for (var i = 0; i < matches.length; i++)
searchString += " NOT " + matches[i];发布于 2010-04-13 16:04:25
当你这样做时会发生什么:
for (var i = 0; i < matches.length; ++i) { /* ... */ }在数组实例上使用"in“形式的for”循环“是非常危险的。
编辑查看AndyE的答案,特别是关于"input“属性的内容。
https://stackoverflow.com/questions/2631079
复制相似问题