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] 执行匹配的字符串