IE Javascript String.Match问题

Ben*_*zar 3 javascript regex internet-explorer

以下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 );
Run Code Online (Sandbox Code Playgroud)

正确的输出应该是:

不是狗不是猫不是"海盗船"

但在IE8中我得到:

不是狗猫"海盗船"不是狗不是猫不是"海盗船"不是8不是21

有关如何使这种跨浏览器兼容的任何建议.

非常感谢,

And*_*y E 5

问题是你使用该for...in声明.一个for...in语句将遍历对象的所有枚举的属性,他们不是真的适合用于遍历数组元素-在这种情况下,它遍历以下特性:

matches.input
matches.0
matches.1
matches.2
matches.index
matches.lastIndex
Run Code Online (Sandbox Code Playgroud)

另请参见http://msdn.microsoft.com/en-us/library/7df7sf4x(VS.85).aspx:

match方法返回的数组有三个属性,input,index和lastIndex.input属性包含整个搜索的字符串.index属性包含匹配的子字符串在完整搜索字符串中的位置.lastIndex属性包含最后一个匹配中最后一个字符后面的位置.

请使用适当的声明:

for (var i = 0; i < matches.length; i++)
    searchString += " NOT " + matches[i];
Run Code Online (Sandbox Code Playgroud)