深入解析JavaScript中replace方法的使用技巧与正则表达式应用
在 JavaScript 中,replace 方法是一个比较复杂的方法,涉及到正则表达式。严格来说,它应该是字符串对象的一个方法。只是涉及到规律性的情况比较多而已。我们需要灵活运用。

语法: stringObj.replace(regexp/substr,replacement);
第一个参数:必填。字符串中要替换的子字符串或常规 RexExp;
第二个参数:必需,一个字符串值,指定替换文本或生成替换文本的函数。
返回值:注意它的返回值是一个新的字符串,不会改变原来的字符串。将正则表达式的第一个匹配项或所有匹配项替换为替换后得到。
因此,根据其参数的不同,分为多种情况。下面对每种情况一一分析:
NO.1 两个参数都是字符串
var str1 = '这是一段原文,需要替换的内容“这个需要替换”! ';
var newStr = str1.replace('这个需要替换','需要替换');
console.log( newStr ); //输出:这是一段原文,需要替换的内容“需要替换”!
在上面的示例中,第二个参数字符串“need replacement”替换了第一个参数字符串“this need to be replacement”。这是最简单的形式。
NO.2 第一个参数是正则表达式,第二个参数是字符串。
var str2 = '这是一段原文,需要替换的内容是“ac,这个需要替换bb”! ';
var newStr = str2.replace( /([az])+/g,'qqq' );
console.log( newStr ); //输出:这是一段原文,需要替换的内容是“qqq,这个需要替换qqq”!
上面的示例字符串'qqq'替换了正则匹配的内容。如果正则表达式具有全局标志 g,则 Replace() 方法将替换所有匹配的子字符串。否则,它仅替换第一个匹配的子字符串。
NO.3 第一个参数是正则表达式,第二个参数是带有$符号的字符串。
var str3 = '这是一段原文,“3c应该取代4d”!';
var newStr = str3.replace( /([0-9])([az])/g,"$1" );
console.log( newStr ); //输出:这是一段原文,“3应该替换为4”!';
在上面的示例中,$1 表示正则表达式中的第一个子表示形式,即 ([0-9]) 匹配单个数字。同样,$2表示第二个子表示,即([az]);因此,'3c'匹配整体被第一个子表示所表示的'3'替换,'4d'被第一个子表示匹配的数字'4'替换。用同样的方法还可以推导出其他几个例子:
(/([0-9])([az])/g,"$2")—>输出:这是一段原文,“c should replacement d”!'; (3c和4d替换为对应的第二个Sub表示匹配的c和d替换)
(/([0-9])([az])/g,"$'")—>输出:这是一段原文,“This is to Replace d”!这是替换“!”!'; (3c被3c右边的文字替换,4d右边被“!”替换,所以出现了两次)
NO.4 第一个参数是正则表达式,第二个参数是函数
var str4 = '这是一段原文,需要替换的内容是“aa,将cccccc替换为bbb”! ';
var newStr = str4.replace( /[az]+/g,函数 ($0){
var str = '';
for (var i = 0; i < $0.length; i++) {
str += '*';
};
返回字符串;
} );
console.log(newStr); //这是一段原文,需要替换的内容是“**这需要***被替换*****”!
上面示例函数的第一个参数是整个匹配的正则表达式,函数根据长度的返回值是对应的替换文本;
NO.5 第一个参数是一个正则表达式并且有子表达式,第二个参数是一个有多个参数的函数。
var str5 = '这是一段原文,需要替换的内容是“3c这个需要替换4d”! ';
var newStr = str5.replace( /([0-9])([az])/g,function (arg1,arg2,arg3,arg4,arg5){
控制台.log(arg1);
控制台.log(arg2);
控制台.log(arg3);
控制台.log(arg4);
控制台.log(arg5);
} );
//输出:
3c
17 号
这是一段原文,需要替换的内容是“3c应该替换4d”!
4天
23
这是一段原文,需要替换的内容是“3c应该替换4d”!
在上面的例子中,第一个参数arg1代表整个匹配,arg2代表第一个子表达式,arg3代表第二个子表达式,下一个参数arg4是一个整数,声明子匹配在stringObject中出现的位置。 。最后一个参数是 stringObject 本身。
以上是replace方法的各种可能的情况。确实是一个需要深入了解的方法,但确实是一个非常强大的方法,值得深入研究!