xuhua123

 今天在看算法时,看到一些题目,感觉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+)(\b+)/ 这个来匹配,p1 就是匹配的 \a+p2 就是匹配的 \b+

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

 

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











分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-05
  • 2021-09-09
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案