2010-04-13 51 views
3

以下JavaScript代碼連接了正則表達式找到的匹配項。正則表達式應該找到任何單詞或一組引用的單詞。它似乎在FireFox和Chrome中完美工作,但它在IE中不能正常工作(我只在IE8上測試過它)。IE Javascript String.Match問題

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即時得到:

不是狗貓「海盜船「不是狗不是 貓不是」海盜船「不是8不是21

關於如何使這個跨瀏覽器兼容的任何建議。

非常感謝,

回答

5

問題是您使用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方法返回的數組有三個屬性input,index和lastIndex。輸入屬性包含整個搜索的字符串。 index屬性包含完整搜索字符串中匹配子字符串的位置。 lastIndex屬性包含最後一次匹配中最後一個字符後面的位置。

使用適當的語句來代替:

for (var i = 0; i < matches.length; i++) 
    searchString += " NOT " + matches[i]; 
3

當你這樣做會發生什麼:

for (var i = 0; i < matches.length; ++i) { /* ... */ } 

使用「中」的「爲」形式排列情況下的循環是強大的風險。

編輯查看AndyE的答案,特別是關於「輸入」屬性的東西。