本内容以结果为导向,来进行推断的,所以如果有错误部分请评价指出,谢谢您。
在正则表达式中,可以使用小括号进行分组,那么这个$0$1$2$3...$9
相当于引用分组,但是在使用replace()方法时,输出结果却不是想象中的那样。
var str = '小括号进行分组小括号进行分组';
var reg = /(...)(....)/g;
str.replace(reg, function ($1) {
console.log($1);
});
本来理想中的状态就是将小括号进行分组小括号进行分组
分成(小括号)(进行分组)
+ (小括号)(进行分组)
从而输出的第一个括号内容为小括号
,但是实际输出却是两组小括号进行分组
当我们把代码中加入一个$0
时,此时我们输入就是想要的了
var str = '小括号进行分组小括号进行分组';
var reg = /(...)(....)/g;
str.replace(reg, function ($0, $1) {
console.log($1);
});
输出为小括号
================================
如果此时把$0, $1
换成$3, $4
时
var str = '小括号进行分组小括号进行分组';
var reg = /(...)(....)/g;
str.replace(reg, function ($3, $4) {
console.log($3);
});
输出为小括号进行分组
=================================
当然我们能直接对形参进行扩展运算
var str = '小括号进行分组小括号进行分组';
var reg = /(...)(....)/g;
str.replace(reg, function (...arguments) {
console.log(arguments);
});
输出为
["小括号进行分组", "小括号", "进行分组", 0, "小括号进行分组小括号进行分组"]
["小括号进行分组", "小括号", "进行分组", 7, "小括号进行分组小括号进行分组"]
从而我们可以直接使用arguments[1]来使用小括号
这个
js 中 replace 的第二个参数是函数时的函数参数解析
=================================
总结:
我个人觉得这里面必须要加一个$X
来表示整个匹配的结果,后来比X大1个的分组则代表整个匹配中的第一个分组