js中string之正则表达式replace⽅法详解
replace⽅法是javascript涉及到正则表达式中较为复杂的⼀个⽅法,严格上说应该是string对象的⽅法。只不过牵扯到正则的时候⽐较多⼀些。需要我们灵活的使⽤。
语法: place(regexp/substr,replacement);
第⼀个参数:必需。字符串中要替换的⼦串或正则RexExp;
第⼆个参数:必需,⼀个字符串值,规定了替换⽂本或⽣成替换⽂本的函数。
返回值:注意它的返回值是⼀个新的字符串,并没有更改原有字符串,是⽤ replacement 替换了 regexp 的第⼀次匹配或所有匹配之后得到的。
所以根据它的参数的不同分为很多种情况,以下⼀⼀对各种情况加以分析:
NO.1 两个参数都是字符串js正则表达式数字和小数点
var str1 = '这是⼀段原始⽂本,需要替换的内容"这要替换"!';
var newStr = place('这要替换','need replace');
console.log( newStr );  //输出:这是⼀段原始⽂本,需要替换的内容"need replace"!
上⾯的例⼦中第⼆个参数字符串'need replace',替换掉了第⼀个参数字符串'这要替换'。这是最简单的⼀种形式。
NO.2 第⼀个参数是正则,第⼆个参数是字符串
var str2 = '这是⼀段原始⽂本,需要替换的内容"ac这要替换bb"!';
var newStr = place( /([a-z])+/g,'qqq' );
console.log( newStr );  //输出:这是⼀段原始⽂本,需要替换的内容"qqq这要替换qqq"!
上⾯的例⼦字符串'qqq',替换了正则匹配的内容。如果 regexp 具有全局标志 g,那么 replace() ⽅法将替换所有匹配的⼦串。否则,它只替换第⼀个匹配⼦串。
NO.3 第⼀个参数是正则,第⼆个参数是带$符的字符串
var str3 = '这是⼀段原始⽂本,"3c这要替换4d"!';
var newStr = place( /([0-9])([a-z])/g,"$1" );
console.log( newStr );  //输出:这是⼀段原始⽂本,"3这要替换4"!';
上⾯的例⼦,$1表⽰regexp中的第⼀个⼦表⽰即([0-9])匹配单个数字,同理若是$2则表⽰第⼆个⼦表⽰即([a-z]);所以,'3c'这个匹配到的整体被第⼀个⼦表⽰说表⽰的'3'替换,'4d'被第⼀个⼦表⽰匹配的数字'4'所替换。其他⼏个同理可得:
(/([0-9])([a-z])/g,”$2″)—>////输出:这是⼀段原始⽂本,”c这要替换d”!'; (3c和4d被相应的第⼆个⼦表⽰匹配出来的c和d替换)(/([0-9])([a-z])/g,”$'”)—>////输出:这是⼀段原始⽂本,”这要替换d”!这要替换”!”!'; (3c被3c右侧⽂本替换,4d右侧是”!替换,所以出现俩次)
NO.4 第⼀个参数是正则,第⼆个参数函数
var str4 = '这是⼀段原始⽂本,需要替换的内容"aa这要bbb替换ccccc"!';
var newStr = place( /[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 = place( /([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 本⾝。
以上就是replace⽅法各种可能的情况。确实是⼀个需要深⼊理解的⽅法,不过确实也很强⼤的⼀个⽅法,值得深⼊研究!