2012-12-17 38 views
0

一組正則表達式我有一組存儲在對象的正則表達式,沿圈穿過的JavaScript

myRegexes = {}; 
myRegexes.reg1 = /[a-z]+[0-9]+/; 
myRegexes.reg2 = /[a-e]+/; 

的風格,我可以再做myRegexes.reg1.exec(sampleStr)和它完美的罰款。

但是,如果我遍歷這個對象,並說

for(reg in myRegexes){ 
    reg.exec(sampleStr); 
} 

我得到一個異常說「類型錯誤:對象REG1有沒有方法‘高管’」

我知道,JavaScript是靠不住着如何它執行for-in循環,但我不明白它是如何成功找到變量的,但是一路上失去了它的方法。任何人都可以告訴我爲什麼這會失敗,以及正確的方法是什麼?

+4

對於for循環,JavaScript並不是真正的好手。它只是不會做你認爲它:) – PeeHaa

+0

我在想你應該使用hasOwnProperty的實例,以避免不必要的工件。在這種情況下,我只是不瞭解基礎知識。 – BostonJohn

+1

這裏的關鍵在於Javascript如何處理對象的成員;它們基本上都是哈希鍵,所以當你循環它們時,你會這樣對待它們。下面的答案給出了更多細節,但這是要點。定義對象的屬性等同於創建散列表。 – RonaldBarzell

回答

6

reg指屬性名稱,你必須抓住實際的正則表達式對象:

for(reg in myRegexes) { 
    myRegexes[ reg ].exec(sampleStr); 
} 
2

for-in-loop列舉了一個對象的屬性,reg是屬性名稱(字符串)不是屬性值(您正則表達式)。使用

for (reg in myRegexes) 
    myRegexes[reg].exec(sampleStr);