前 言
閑來無事,也學(xué)學(xué)大神,研究下Vue源碼,這一研究感覺自己弱爆了,好多基礎(chǔ)的東西都不知道,本篇文章主要為了自己記錄學(xué)習(xí),如果能讓同道中人有所提高,自是最好。
javaScript中的replace方法
源碼先貼出來:
/**
* Camelize a hyphen-delimited string.
*/
var camelizeRE = /-(\w)/g;
var camelize = cached(function (str) {
return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
});
看到第二個參數(shù)我直接查了一下文檔,replace的語法是這樣的:
stringObject.replace(regexp/substr,replacement)
stringObject不用說,就是個字符串;
- replace方法的第一個參數(shù)分兩種情況:
-
substr(字符串); -
regexp(正則表達(dá)式)
- replace方法的第二個參數(shù)也分兩種情況:
- 字符串(常見用法,不多說);
- 函數(shù)(本篇重點):
看例子,再總結(jié):
let str = 'my-string';
str.replace('my', (...rest) => {
console.log(...rest); // my 0 my-string
return '*';
})
// *-string
str.replace(/string/g, (...rest) => {
console.log(...rest); // string 3 my-string
return '*'
})
// my-*
/**
* 特殊情況
*/
str.replace(/-(\w)/g, (...rest) => {
console.log(...rest); // -s s 2 my-string
return '*';
})
// my*tring
如果你對上文中 rest參數(shù) 有疑惑,請移步這里。
當(dāng)replace方法第二個參數(shù)為一個函數(shù)時,此時函數(shù)有三個參數(shù),分別為匹配字符串,匹配字符串最小索引以及原字符串;
特殊情況 - 如果第一個參數(shù)是正則表達(dá)式并且正則表達(dá)式中標(biāo)記了子表達(dá)式(即使用了括號),此時函數(shù)有四個參數(shù),分別為匹配字符串,正則表達(dá)式中子表達(dá)式匹配到的字符串,匹配字符串最小索引以及原字符串。
擴(kuò) 展
生性多疑的我,此時在想,如果正則表達(dá)式中標(biāo)記多個子表達(dá)式時會是什么情況呢?哪位大家不是說過嘛,“實踐是檢驗真理的唯一標(biāo)準(zhǔn)”,我們操練起來:
let str = 'my-test_String';
str.replace(/(-)(\w)/g, (...rest) => {
console.log(...rest); // -t - t 2 my-test_String
return '*';
})
// my*est_String
原來當(dāng)正則表達(dá)式中標(biāo)記了多個子表達(dá)式時,對應(yīng)的,從第二個參數(shù)開始,函數(shù)參數(shù)依次是正則表達(dá)式每個子表達(dá)式匹配的字符串,然后是匹配字符串的最小索引,最后是原字符串。
看到這里你就會明白上面的源碼其實就是把用 ‘-’ 連接的字符轉(zhuǎn)為駝峰命名的形式。