replace的回调函数。

 今天在看算法时,看到一些题目,感觉replace的回调函数好奇葩,$0 、$1什么的;

JS的replace方法:

str.replace(regexp|substr, newSubStr|function)

regexp参数是你的正则表达式

substr参数: 表示你要查找的字符/字符串

newSubStr参数: 表示你要将匹配到的字符串替换成的新字符串

function参数: 回调函数;这个回调函数又有着多个参数

replace中回调函数的参数:

变量名 代表的值
match 匹配的子串。(对应于上述的$&。)
p1,p2, ...

假如replace()方法的第一个参数是一个RegExp 对象,则代表第n个括号匹配的字符串。(对应于上述的$1,$2等。)例如,如果是用 /(a+)(+)/ 这个来匹配,p1 就是匹配的 a+p2 就是匹配的 +

offset

匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 'abcd',匹配到的子字符串是 'bc',那么这个参数将会是 1)

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中的参数;其实放什么都行;

心得:有些东西看起来好奇怪,就觉得很难;其实只要换一种想法就行了。











原文地址:https://www.cnblogs.com/xuhua123/p/12059841.html