2013-12-15 77 views
0

此:爲什麼toLowerCase()不適用於正則表達式?

replace(/([a-zA-Z])([A-Z]+)/g,'$1'+'$2'.toLowerCase()) 

不轉換$ 2小寫(不變)

但是:

replace(/([a-zA-Z])([A-Z]+)/g,'$1'+'heLLo'.toLowerCase()) 

使每一個大寫的 「你好」 被替換(如預期)

爲什麼?

謝謝。

+1

你需要使用一個回調 – HamZa

+0

對不起,甚至不工作瓦特/回調。它認爲它是一個字符串:( – FlorianB

+1

檢查下面的[demo](http://jsfiddle.net/pGp36/)。'r0'是組0,這意味着整個匹配的字符串。這就是爲什麼我們添加它,所以我們可以使用'r1'和'r2'。享受 – HamZa

回答

2

因爲toLowerCase在它進入主函數replace之前被執行。這是你在做什麼:

replace(/([a-zA-Z])([A-Z]+)/g,'$1hello') 

你可以做你想做這個東西:

var replaceLogic = function(fullMatch, firstGroup, secondGroup){ 
    return firstGroup.toLowerCase() + secondGroup; 
}; 
string.replace(/([a-zA-Z])([A-Z]+)/g, replaceLogic); 
+0

好吧,但如果我寫函數(){...}裏面replace()它將使用它作爲一個字符串。我如何強制執行代碼? – FlorianB

+0

你不能用替換。您將需要另一個方法,例如將字母的位置存儲爲小寫,然後遍歷它們。我認爲應該存在更好的方式。 – durum

+1

+1 - 這確實正確回答了所問的具體問題。 (但是你錯了不能用'String.replace()'來做到這一點 - 見HamZa的評論。) – ridgerunner

相關問題