replace()方法是String类型用于匹配模式的方法之一。
替换子字符串
string.replace(pattern,str)
第一个参数pattern是一个RegExp对象或一个字符串;
第二个参数是一个字符串或一个函数;
返回被替换后的新字符串,院字符串不改变;
如果pattern是一个字符串,那么只会替换string中的第一个子字符串,想要替换所有的子字符串,patter只能是一个正则表达式,且要有全局标志g;
var str = 'cat bat sat';
var newstr1 = str.replace('at','mn');
alert(str); //'cat bat sat'
alert(newstr1); //'cmn bat sat'
var newstr2 = str.replace(/at/g,'mn');
alert(newstr2); //'cmn bmn smn'
如果第二个参数是一个函数:
只有一个匹配项时,会向函数传递三个参数:模式的匹配项、模式匹配项在字符串中的位置、原始字符串;
正则表达式定义多个捕获组时,传函数的参数依次是:模式的匹配项、第一个捕获组的匹配项、第二个捕获组的匹配项、第三个…模式匹配项在在字符串中的位置和原始字符串。
此函数返回应该被替换的匹配项;
var str = 'cat bat sat';
var sub =[], position =[];
var newstr1 = str.replace(/at/g,function(substr,index,inistr){
sub.push(substr);
position.push(index);
return 'mn';
});
alert(newstr1); //cmn bmn smn
alert(sub); //at,at,at
alert(position); // 1,5,9
//捕获组
var Url = 'http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe';
var sub =[], fir =[],sec=[];
var reg = /\??(\w+)=(\w+)&?/g;
//正则表达式reg有两个捕获组
var newstr1 = Url.replace(reg,function(a,first,second){
sub.push(a);
fir.push(first);
sec.push(second);
return 'yes ';
});
alert(newstr1);
//替换后的字符串 http://www.nowcoder.comyes yes yes yes #hehe
alert(sub);
//所有匹配项 ?key=1&,key=2&,key=3&,test=4
alert(fir);
// 第一个捕获组 key,key,key,test
alert(sec);
//第二个捕获组 1,2,3,4