replace(/([a-zA-Z])([A-Z]+)/g,'$1'+'$2'.toLowerCase())
不轉換$ 2小寫(不變)
但是:
replace(/([a-zA-Z])([A-Z]+)/g,'$1'+'heLLo'.toLowerCase())
使每一個大寫的 「你好」 被替換(如預期)
爲什麼?
謝謝。
replace(/([a-zA-Z])([A-Z]+)/g,'$1'+'$2'.toLowerCase())
不轉換$ 2小寫(不變)
但是:
replace(/([a-zA-Z])([A-Z]+)/g,'$1'+'heLLo'.toLowerCase())
使每一個大寫的 「你好」 被替換(如預期)
爲什麼?
謝謝。
因爲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);
好吧,但如果我寫函數(){...}裏面replace()它將使用它作爲一個字符串。我如何強制執行代碼? – FlorianB
你不能用替換。您將需要另一個方法,例如將字母的位置存儲爲小寫,然後遍歷它們。我認爲應該存在更好的方式。 – durum
+1 - 這確實正確回答了所問的具體問題。 (但是你錯了不能用'String.replace()'來做到這一點 - 見HamZa的評論。) – ridgerunner
你需要使用一個回調 – HamZa
對不起,甚至不工作瓦特/回調。它認爲它是一個字符串:( – FlorianB
檢查下面的[demo](http://jsfiddle.net/pGp36/)。'r0'是組0,這意味着整個匹配的字符串。這就是爲什麼我們添加它,所以我們可以使用'r1'和'r2'。享受 – HamZa