今天在讀jquery原始碼時,發現一個以前自己不曾注意過得問題,就是replece()的第二個參數為函數時的問題,以前只是知道replace()的第二個參數可以為函數,但是不知道該怎麼操作,今天看到源碼裡用到了函數作為replace()的第二個參數時,感覺自己讀起來比較吃力,於是準備整理下這個函數...
文法
stringObject.replace( regexp/substr, replacement)
傳回值
傳回一個新的字串,是用replacement取代了regexp的第一次匹配或所欲匹配之後得到的
當replace()方法的參數replacement是函數時,在這種情況下,每個匹配都會呼叫該函數,函數傳回的字串作為替換文字使用。此函數的第一個參數是匹配模式的字串。接下來的參數是與模式中的子表達式相符的字串,可以有0個或多個這樣的參數。接下來的參數是一個整數,宣告了匹配在stringObject中出現的位置。最後一個參數是stringObject本身。這席話是抄至w3cschool,對於現在的我來說以上的那段話我看著不是很明白,也不能用自己的話來簡單描述下,所以只能用實例來說明這一切
var string = "abc123-ii";
string.replace(/(d)-([da-z])/g,function( str1, str2, str3,str4,str5){
console.log( str1 );// 3-i
console.log( str2 );// 3(第一個捕獲)
console.log( str3 );// i(第二個不捕獲組)
console.log( str4 );// 5(符合string中出現的位置)
console.log( str5 );// abc123-ii(string本身)
return "I";
})
以上是今天我在看jquery源碼
camelCase: function( string ) {
return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
},
fcamelCase = function( all, letter ) {
return letter.toUpperCase();
};
時所引發的一些不明白,感覺現在自己對這個函數懂了的樣子
然後現在我又想起不知道在以前什麼時候,自已在用repleace()所遇到的對於那時的我來說是怪符號,形如“$1,$2”等等。現在夜來對這問題來做一個解答了
$1,$2, $3.....表示捕獲1,2,3....
var string = "abc123-ii";
console.log(string.replace(/(d)-([da-z])/g, "$1")); // 用捕獲組1(3)去替換/(d)-([da-z ])/g
$&表示與regexp相符的子字串
var string = "abc123-ii";
console.log(string.replace(/(d)-([da-z])/g, "$&")); // 用與regexp相符的字串(3-i)去替換/(d )-([da-z])/g
$`表示位於符合子字串左側的文字
var string = "abc123-ii";
console.log(string.replace(/(d)-([da-z])/g, "$`")); // 用符合字串左側的文字(abc12)去取代/(d)- ([da-z])/g
$'表示位於匹配子字串右側的文字
var string = "abc123-ii";
console.log(string.replace(/(d)-([da-z])/g, "$'")); // 用位於符合字串右側的文字去取代/(d)-([ da-z])/g
$$直接為$符號
var string = "abc123-ii";
console.log(string.replace(/(d)-([da-z])/g, "$$")); // 用$符號去取代/(d)-([da-z])/ g
以上是自己對於replace()方法使用不明確的地方,本人前端小白,如果有寫的不對的地方,或者有關於此方法更好用法的實例希望各位看官能夠分享...
以上所述就是本文的全部內容了,希望大家能夠喜歡。