今天在看算法时,看到一些题目,感觉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 命名捕获组匹配的对象
 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中的参数;其实放什么都行;

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



replace的回调函数。的更多相关文章

  1. js中replace的回调函数使用。

    这只是一个小问题,但是之前并没有发现.这个问题就是replace的第二个函数是支持回调函数的. var ext = new RegExp('f','g'); 1.str.replace(ext ,1) ...

  2. js小知识-replace的回调函数

    replace() 方法返回一个由替换值替换一些或所有匹配的模式后的新字符串.模式可以是一个字符串或者一个正则表达式, 替换值可以是一个字符串或者一个每次匹配都要调用的函数. 注意:原字符串不会改变. ...

  3. JS replace可以接受回调函数

    这是js最鲜为人知的秘密之一,v 1.3首次引入.大部分情况下repalce的使用情况如下: '10 12 13 40 50'.replace(/\d+/g,'*');//用 * 替换所有的数字 这是 ...

  4. 正则表达式的方法:replace,match,test(replace参数可以是回调函数)

    1.replace: 作用对象:字符串 功能:用于替换字符串中的某些字符 参数:(1)正则表达式 (2)要替换的字符串 或者 回调函数 var str="1 2 3 4 5 6 7 8 9& ...

  5. 正则replace 回调函数里接收的参数是什么?

    前言 我们都知道 replace 在做替换处理方面会很常用,通常也是第一个会想到的方法.replace 第一个参数可以传入 string 或 RegExp,第二个参数可以传入 string 或 一个回 ...

  6. js的回调函数 一些例子

    这边用bootstrap 3.0的  上传控件做例子 下面是上传控件的一段完整的 js 操作 代码. <!-- 上传缩略图控件配置 --><script> // 定义这四个全局 ...

  7. cocos2d-x 2.2.0 如何在lua中注册回调函数给C++

    cocos2d-x内部使用tolua进行lua绑定,但是引擎并没有提供一个通用的接口让我们可以把一个lua函数注册给C++层面的回调事件.翻看引擎的lua绑定代码,我们可以仿照引擎中的方法来做.值得吐 ...

  8. [js]js中回调函数

    //回调函数: 把一个函数当参数传给另个函数 /* function f1() { console.log('f1'); } function f2(f) { f(); console.log(1); ...

  9. Unity 之 C# 利用回调函数实现C++匿名函数

    做C++开发的都用过匿名函数很好用,可是C#开发怎么实现呢?前几天做一个拍照功能的时候.我偶然发现某个函数假设是C++的话.用匿名函数太好了,于是開始研究C#的回调,代理.托付等,最后总算是实现了我想 ...

随机推荐

  1. SpringBoot中实现Spring容器中注入类型相同但名不同Bean

    @Bean(autowire = Autowire.BY_NAME,value = "kaptchaProducer") public Producer kaptchaProduc ...

  2. The difference between Virtual DOM and DOM

    dom是结构化的文本信息的抽象,是结构化的文本信息在内存中的表示 是操作结构化文本信息的api. Follow: Follow React attacks us with the virtual DO ...

  3. 代码块和Java的API及Object类

    代码块 局部代码块 特点: 以”{}”划定的代码区域,此时只需要关注作用域的不同即可 方法和类都是以代码块的方式划定边界的 构造代码块 优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作 ...

  4. 如何安全地使用redis的pop命令

    Redis的list经常被当作队列使用,左进右出,一般生产者使用lpush压入数据,消费者调用rpop取出数据. 这是很自然的行为,然而有时会发现lpush成功,但rpop并没有取到数据,特别是一些客 ...

  5. Flume 实战,将多台机器日志直接收集到 Kafka

    目前我们使用的一个 b 端软件的报错日志分散在集群各处,现在想把它收集到一个地方然后统一丢进 Kafka 提供给下游业务进行消费. 我想到了 flume,之前让同事搭建的这次自己想多了解一些细节于是就 ...

  6. nginx 反向代理之 proxy_set_header

    proxy_set_header用来设定被代理服务器接收到的header信息. 语法:proxy_set_header field value; field :为要更改的项目,也可以理解为变量的名字, ...

  7. shell脚本获取传入参数的个数

    ts.sh #!/bin/bash echo $# 输出 [root@redhat6 ~]# ./ts.sh para1 [root@redhat6 ~]# ./ts.sh para1 para2 [ ...

  8. Waring:not all local change may be shown due to an error:fatal

    idea往Git上提交文件时提示 Waring:not all local change may be shown due to an error:fatal 解决方案:选择File --> s ...

  9. MySQL百万级数据分页查询及优化

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺 ...

  10. SAS 分层抽样示例代码

    PROC SURVEYSELECT DATA=B OUT=C(DROP=SelectionProb SamplingWeight) METHOD=SRS SEED=100 SAMPSIZE=1; ST ...