字串replace方法的使用

LFE發表於2018-01-25

str.replace(regexp|substr, newSubStr|function)

作用:返回一個由替換值替換一些或所有匹配模式後的新字串

引數詳解:

第一個引數可以為正則物件或者字串字面量
第二個引數可以為一個新字串也可以為一個函式,該函式返回替換項
複製程式碼
1、第二個引數為字串的情況:
a、常見情況:
var str='abcdefg';
var reg=/cd/g;
str=str.replace(reg,'');
console.log(str);   //abefg
複製程式碼
b、使用變數名替換特定部位:(注意要替換特定部位的話,在正則物件中要是用括號包裹)
  • 變數為$$的情況:插入用$符號替換正則物件中括號包裹的字元所匹配到的內容
var str='abcdefg';
var reg=/(c)d/g;
str=str.replace(reg,'$$d');//這裡括號包裹的c被$替換了,然後再替換整個匹配到的cde
console.log(str);//ab$defg
複製程式碼
  • 變數為$n的情況:插入匹配第n個括號中的字元
var str='abcdefg';
var reg=/(c)d(e)/g;
str=str.replace(reg,'$2d$1');   //這裡把匹配的第一個內容合第二個內容替換位置($1匹配第一個位置,$2匹配第二個位置),然後再替換整個匹配到的cde
console.log(str);   //abedcfg
複製程式碼
  • 變數為$&的情況:插入被正則物件匹配到的字元
var str='abcdefg';
var reg=/(c)d(e)/g;
str=str.replace(reg,'$&d$1$2');//這裡在匹配到的d前面插入整個匹配到的字元cde,在d後面插入匹配到的第一個和第二個括號中的內容,然後再替換整個匹配到的cde
console.log(str);//abcdedcefg
複製程式碼
  • 變數為$`的情況:插入當前匹配的子串左邊的內容
var str='abcdefg';
var reg=/(c)d(e)/g;
str=str.replace(reg,'d$`');//這裡是把匹配到的字串cde左邊內容ab插入到d後面,然後再替換整個匹配到的cde
console.log(str);//abdabfg
複製程式碼
  • 變數為$'的情況:插入當前匹配的子串右邊的內容
var str='abcdefg';
var reg=/(c)d(e)/g;
str=str.replace(reg,"d$'");//這裡是把匹配到的字串cde右邊內容fg插入到d後面,然後再替換整個匹配到的cde(注意這裡的單引號要用雙引號包裹)
console.log(str);//abdfgfg
複製程式碼
1、第二個引數為函式的情況:

替換函式引數詳解

變數名 代表的值
match 匹配的子串。(對應於上述的**$&**。)
p1,p2, ... 類似於上述$1,$2……
offset 匹配到的子字串在原字串中的偏移量。(比如,如果原字串是“abcd”,匹配到的子字串是“bc”,那麼這個引數將是1)
string 被匹配的原字串。
var str='xiaoming';
var reg=/(a)o(m)/g;
function replacer(match, p1, p2, offset, string) {
    console.log(match, p1, p2, offset, string);//aom a m 2 xiaoming
  return [p1, p2].join(' - ');
}
var newString = str.replace(reg, replacer);
console.log(newString);  //xia - ming
複製程式碼

參考:MDN

相關文章