今天在看算法时,看到一些题目,感觉replace的回调函数好奇葩,$0 、$1什么的;
JS的replace方法:
str.replace(regexp|substr, newSubStr|function)
regexp参数是你的正则表达式
substr参数: 表示你要查找的字符/字符串
newSubStr参数: 表示你要将匹配到的字符串替换成的新字符串
function参数: 回调函数;这个回调函数又有着多个参数
replace中回调函数的参数:
变量名 | 代表的值 |
match | 匹配的子串。(对应于上述的$&。) |
p1,p2, ... | 假如replace()方法的第一个参数是一个 |
offset | 匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 |
string | 被匹配的原字符串。 |
NamedCaptureGroup | 命名捕获组匹配的对象 |
let str = 'aaaabbbcccdde'
// str2 = str2.split('').sort().join('');
let re = /(\w)\1+/g
str.replace(re, ($0, $1, $3, $4) => {
console.log($0 + ' ' + $1 + ' '+$3 + ' ' +$4);
/**
* aaaa a 0 aaaabbbcccdde
bbb b 4 aaaabbbcccdde
ccc c 7 aaaabbbcccdde
dd d 10 aaaabbbcccdde
*/
if (num < $0.length) {
num = $0.length;
char = $1;
}
});
console.log(`字符最多的是${char},出现${num}次`);
可以看到其实$0, $1对于的就是上述function中的参数;其实放什么都行;
心得:有些东西看起来好奇怪,就觉得很难;其实只要换一种想法就行了。