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