js--string/正則表達式replace方法詳解

replace方法是javascript涉及到正則表達式中較爲複雜的一個方法,嚴格上說應該是string對象的方法。只不過牽扯到正則的時候比較多一些。須要咱們靈活的使用。javascript

語法: stringObj.replace(regexp/substr,replacement)java

第一個參數:必需。字符串中要替換的子串或正則RexExp;
第二個參數:必需,一個字符串值,規定了替換文本或生成替換文本的函數。
返回值:注意它的返回值是一個新的字符串,並無更改原有字符串,是用 replacement 替換了 regexp 的第一次匹配或全部匹配以後獲得的。
因此根據它的參數的不一樣分爲不少種狀況,如下一一對各類狀況加以分析:正則表達式

NO.1 兩個參數都是字符串

var str1 = '這是一段原始文本,須要替換的內容"這要替換"!';
var newStr = str1.replace('這要替換','need replace');
console.log( newStr );    //輸出:   這是一段原始文本,須要替換的內容"need replace"!

上面的例子中第二個參數字符串’need replace’,替換掉了第一個參數字符串’這要替換’。這是最簡單的一種形式。函數

NO.2 第一個參數是正則,第二個參數是字符串

var str2 = '這是一段原始文本,須要替換的內容"ac這要替換bb"!';
var newStr = str2.replace( /([a-z])+/g,'qqq' );
console.log( newStr );    //輸出:   這是一段原始文本,須要替換的內容"qqq這要替換qqq"!

上面的例子字符串’qqq’,替換了正則匹配的內容。若是 regexp 具備全局標誌 g,那麼 replace() 方法將替換全部匹配的子串。不然,它只替換第一個匹配子串。spa

NO.3 第一個參數是正則,第二個參數是帶$符的字符串

var str3 = '這是一段原始文本,"3c這要替換4d"!';
var newStr = str3.replace( /([0-9])([a-z])/g,"$1" );
console.log( newStr );    //輸出:    這是一段原始文本,"3這要替換4"!';

圖片描述

上面的例子,$1表示regexp中的第一個子表示即([0-9])匹配單個數字,同理如果$2則表示第二個子表示即([a-z]);因此,’3c’這個匹配到的總體被第一個子表示說表示的’3’替換,’4d’被第一個子表示匹配的數字’4’所替換。其餘幾個同理可得:code

(/([0-9])([a-z])/g,」$2″)—>////輸出: 這是一段原始文本,」c這要替換d」!'; (3c和4d被相應的第二個子表示匹配出來的c和d替換)
(/([0-9])([a-z])/g,」$'」)—>////輸出: 這是一段原始文本,」這要替換d」!這要替換」!」!'; (3c被3c右側文本替換,4d右側是」!替換,因此出現倆次)regexp

NO.4 第一個參數是正則,第二個參數函數

var str4 = '這是一段原始文本,須要替換的內容"aa這要bbb替換ccccc"!';
var newStr = str4.replace( /[a-z]+/g,function ($0){
    var str = '';
    for (var i = 0; i < $0.length; i++) {
        str += '*';
    };
    return str;
} );
console.log( newStr );    //這是一段原始文本,須要替換的內容"**這要***替換*****"!

上面的例子函數的第一個參數爲匹配的regexp的總體,根據長度函數返回值爲相應替換的文本;對象

NO.5 第一個參數是正則且有子表達式,第二個參數函數且帶有多個參數

var str5 = '這是一段原始文本,須要替換的內容"3c這要替換4d"!';
var newStr = str5.replace( /([0-9])([a-z])/g,function (arg1,arg2,arg3,arg4,arg5){
 console.log( arg1 );
  console.log( arg2 );
  console.log( arg3 );
  console.log( arg4 );
  console.log( arg5 );
} );
//輸出:
3c
3
c
17
這是一段原始文本,須要替換的內容"3c這要替換4d"!
4d
4
d
23
這是一段原始文本,須要替換的內容"3c這要替換4d"!

上面的例子第一個參數arg1表示匹配的總體,arg2表示第一個子表達式,arg3表示第二個子表達式,接下來的參數arg4是一個整數,聲明瞭表示子匹配在 stringObject 中出現的位置。最後一個參數是 stringObject 自己。blog

以上就是replace方法各類可能的狀況。確實是一個須要深刻理解的方法,不過確實也很強大的一個方法,值得深刻研究!圖片

相關文章
相關標籤/搜索