今天在讀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()方法使用不明確的地方,本人前端小白,如果有寫的不對的地方,或者有關于此方法更好用法的實例希望各位看官能夠分享...
以上所述就是本文的全部內容了,希望大家能夠喜歡。