String對象的replace方法包含兩個參數,第一個參數表示執行匹配的正則表達式,也可以傳遞字符串,第二個參數表示代替匹配的子字符串。
var b = s.replace("str1","str2");
與search和match方法不同,replace方法不會吧字符串轉換為正則表達式對象,而是以字符串直接量的文本模式盡心匹配。第二個參數可以是替換文本,或者是生成替換文本的函數,將返回值作為替換文本。
replace方法同時執行查找和替換兩個操作。該方法將在字符串中查找與正則表達式相匹配的子字符串,然后調用第二個參數替換這些子字符串。(js中正則表達式的使用方式有兩種,一種是正則表達式對象的方法,一種是字符串對象的方法,前者有exec(str)、test(str)兩個方法,后者有match(regexp)、replace(regexp)、search(regexp)、split(search)四個方法。)如果正則表達式具有全局性質,那么將替換所有匹配的子字符串,否則只替換第一個匹配子字符串。
var b = '1231231234' ;
console.log(b.replace('123','321')) // 3211231234
console.log(b.replace(/123/,'321')) //3211231234 非全局正則
console.log(b.replace(/123/g,'321')) //3213213214 全局正則
在replace方法中約定了一個特殊的字符“$”,如果加了一個序號,就表示引用正則表達式中匹配的子表達式存儲的字符串。例如:
var s = "javascript";
var b = s.replace(/(java)(script)/,''$2-$1");
console.log(b) // script-java
- $1,$2...$99;與正則表達式中的第1~99個子表達式相匹配的文本。
- $& 與正則表達式相匹配的子字符串。
- $`位於匹配子字符串左側的文本
- $'位於匹配子字符串右側的文本
- $$表示$
當第二個參數使用函數時
var s = 'script language = "javascript" type = " text / javascript" ';
var f = function($1) {
return $1.substring(0,1).toUpperCase() + $1.substring(1)
};
console.log(s.replace(/(\b\w+\b)/g,f)); // Script Language = "Javascript" Type = " Text / Javascript"
var f2 = function($1,$2,$3) {
return $2+$3
};
console.log(s.replace(/(\b\w+\b)/g,f2)); //script0 language7 = "javascript19" type31 = " text40 / javascript47"
- arguments[0] 每次匹配的文本
- arguments[1]~argument[n-3] 第一個至最后一個匹配子表達式匹配的文本
- arguments[n-2] 匹配文本的下標
- arguments[n-1] 執行匹配的字符串
