從Vue源碼學(xué)習(xí)replace的進(jìn)階用法

前 言

閑來無事,也學(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不用說,就是個字符串;

  1. replace方法的第一個參數(shù)分兩種情況:
  • substr(字符串);
  • regexp(正則表達(dá)式)
  1. 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)為駝峰命名的形式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容