一:實現代碼:
var camelizeRE = /-(\w)/g;
function camelize(str){
return str.replace(camelizeRE,function(_,c){
return c ? c.toUpperCase():'';
})
}
camelize('kkk-zzz-hhh'); kkkZzzHzz;
二: 實現原理:
1.replace方法:
stringObject.replace(regexp/substr,replacement)
參數 | 描述 |
---|---|
regexp/substr |
必需。規定子字符串或要替換的模式的 RegExp 對象。 請注意,如果該值是一個字符串,則將它作爲要檢索的直接量文本模式,而不是首先被轉換爲 RegExp 對象。 |
replacement | 必需。一個字符串值。規定了替換文本或生成替換文本的函數。 |
replace中的第一個參數是正則表達式時,第二個參數可以是一個函數,可以接受多個參數。其中,第一個參數是捕捉到的內容,第二個參數是捕捉到的組匹配(有多少個組匹配,就有多少個對應的參數)。此外,最後還可以添加兩個參數,倒數第二個參數是捕捉到的內容在整個字符串中的位置(比如從第五個位置開始),最後一個參數是原字符串。下面是一個網頁模板替換的例子。
例:
1.var str = "kkk_yyy_hhh";
字符串匹配沒有正則組匹配
str.replace(''_",function(_,a,b,c){
console.log(_,a,b,c) // _ 3 kkk_yyy_hhh undefined
})
2.var str = "kkk_yyy_hhh";
正則匹配 沒有正則組匹配
str.replace(/_/g,function(_,a,b,c){
console.log(_,a,b,c) // _ 3 kkk_yyy_hhh undefined _ 7 kkk_yyy_hhh undefined
})
3.var str = "kkk_yyy_hhh";
正則匹配 有正則組匹配
str.replace(/_(\w)/g,function(_,a,b,c){
console.log(_,a,b,c) // _y y 3 kkk_yyy_hhh _h h 7 kkk_yyy_hhh
})
查看第三個案例,既然能拿到_y和y兩個值就能實現將 “連字符字符串” 轉化爲 “駝峯命名字符串”