JavaScript中replace方法的四种正则替换方式及分组获取技巧

作者:代码拾荒时间:2026-10-26 20:56:20浏览:538

本文深入解析JavaScript中String.replace方法的多种用法。通过四个具体案例,演示了使用字符串模板、固定参数回调、非固定参数arguments对象以及独立函数获取正则分组数据的技巧。同时对比了exec与test方法获取分组的差异,并指出了字符串与正则作为参数时替换行为的细微区别。

replace方法参数详解与基本用法

该函数的第一个参数用于指定匹配模式,可以是字符串或正则表达式。后续参数包括与模式中子表达式匹配的字符串,数量由子表达式决定,可以是零个或多个。接着是一个整数,指明匹配在源字符串中出现的位置。最后一个参数则是执行替换操作的源字符串对象本身。


下文展示了JavaScript中正则表达式replace的几种实现方式,其中部分技巧如第二种和第三种方法在常规教程中较少见。


代码如下:

 
正则替换的四种实现方式//下面的例子用来获取url的两个参数,并返回urlRewrite之前的真实Url
var reg=new RegExp("(https://www.jb51.net/BookReader/)(\\d+),(\\d+).aspx","gmi");
var url="https://www.jb51.net/BookReader/1017141,20361055.aspx";
//方式一,最简单常用的方式
var rep=url.replace(reg,"$1ShowBook.aspx?bookId=$2&chapterId=$3");
alert(rep);
//方式二 ,采用固定参数的回调函数
var rep2=url.replace(reg,function(m,p1,p2,p3){return p1+"ShowBook.aspx?bookId="+p3+"&chapterId="+p3});
alert(rep2);
//方式三,采用非固定参数的回调函数
var rep3=url.replace(reg,function(){var args=arguments; return args[1]+"ShowBook.aspx?bookId="+args[2]+"&chapterId="+args[3];});
alert(rep3);
//方法四
//方式四和方法三很类似, 除了返回替换后的字符串外,还可以单独获取参数
var bookId;
var chapterId;
function capText()
{ 
var args=arguments;
bookId=args[2];
chapterId=args[3];
return args[1]+"ShowBook.aspx?bookId="+args[2]+"&chapterId="+args[3];
} 
var rep4=url.replace(reg,capText);
alert(rep4);
alert(bookId);
alert(chapterId);
利用exec与test获取正则分组//除了使用replace方法获取正则表示式的分组外,还可以使用test ,exec方法获取分组,只是手法有所不同而已
var reg2=new RegExp("(https://www.jb51.net/BookReader/)(\\d+),(\\d+).aspx","gmi");
var m=reg2.exec("https://www.jb51.net/BookReader/1017141,20361055.aspx");
var s="";
//获取所有的分组
for (i = 0; i < m.length; i++) {
s = s + m[i] + "\n";
} 
alert(s);
bookId=m[2];
chapterId=m[3];
alert(bookId);
alert(chapterId);
//使用test方法获取分组
var reg3=new RegExp("(https://www.jb51.net/BookReader/)(\\d+),(\\d+).aspx","gmi");
reg3.test("https://www.jb51.net/BookReader/1017141,20361055.aspx");
//获取三个分组
alert(RegExp.$1);
alert(RegExp.$2);
alert(RegExp.$3);
var str="www.baidu.com";
//str.format("好","q")
str.replace(new RegExp("(\\.)(bai)du","g"),function(){
for(var i=0;i<arguments.length;i++)
{ 
document.write(arguments[i]+"<br/>");
} 
document.write("-------------------------------------------------<br/>");
}); 
字符串与正则参数替换行为的差异两个例子(证明,replace传入正则参数和字符传参数结果不同):
alert("123".replace("1",function(){var un;return un;})); //弹出undefined23
alert("123".replace(new RegExp("1"),function(){var un;return un;})); //弹出23
作者最新文章