Це:
replace(/([a-zA-Z])([A-Z]+)/g,"$1"+"$2".toLowerCase() )
Не конвертує $ 2 в малі регістри (без змін)
Але:
replace(/([a-zA-Z])([A-Z]+)/g,"$1"+"heLLo".toLowerCase() )
Зміна кожного верхнього регістру замінюється на "привіт" (як очікувалося)
Чому?
Дякую.
Відповіді:
2 для відповіді № 1Оскільки 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);