正则replace() 方法中的函数的参数$0的疑问?

var str = "中国军队和阿扁一起办证";
var pattern = /国军|阿扁|办证/g;
/*这里的$0是啥意思啊?我看了最新的mdn文档里面好像没有这个$0,只有参数p1,p2,match...,但是好像又能使用*/
str.replace(pattern,function($0){
    console.log($0)
});
阅读 3.8k
4 个回答

$0 没什么特别含义,$0是一个合法的变量名,你换成 a, b, c, d 什么的都可以。

str.replace(pattern,function(a){
    console.log(a)
});

这里是正则的知识,function 里面可以传$0-$99,那个$0,$1....$99是表示正则匹配的组。
比如:
var str = '123-mm';
var strReg = str.replace(/(d+)-([A-Za-z]+)/g,'$2');
console.log(strReg)//mm 上面那段$2这个就是表示正则第二组个匹配到的内容
正则中每一个()代表一个分组。

这个$0与正则的分组没有关系, 只是一个参数名而已, 这个参数名只是长得像正则的分组. 下边这段代码和你的完全一样

var str = "中国军队和阿扁一起办证";
var pattern = /国军|阿扁|办证/g;
/*这里的$0是啥意思啊?我看了最新的mdn文档里面好像没有这个$0,只有参数p1,p2,match...,但是好像又能使用*/
str.replace(pattern,function(param){
    console.log(param)
});

replace第二个参数如果是函数,那这个$0就是一个形参而已
如果是个字符串,那么就是匹配到的组,且从$1开始

'a,b'.replace(/(\w),(\w)/,'$2,$1') //"b,a"
推荐问题