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

前言

我们都知道 replace 在做替换处理方面会很常用,通常也是第一个会想到的方法。replace 第一个参数可以传入 string 或 RegExp,第二个参数可以传入 string 或 一个回调函数。在能够传入回调函数之后,事情就开始变得不简单了(如果有用过map,filter等函数,你就知道传入回调函数的强大)。在做替换处理时,我们能够获取到更多的有效信息,处理的手段也可以更加多样化,而不是单纯的替换。接下来我们,来看看回调函数里接受的参数到底是什么?

回调中接收到的参数

回调中最少可以接受到3个参数,最多没有上限,为什么这么说呢?往下看

MDN的解释:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace#指定一个函数作为参数

解释可能有点官方,我来简述对应的参数吧(我感觉应该都能看懂吧)

看得多,不如动手敲一敲,先看一个例子:

1 let str = ‘aavbbvcc‘
2 let reg = /(b)+/g
3 str.replace(reg, ($0,$1,$2,$3)=>{
4    console.log($0,$1,$2,$3)
5 })
6 //bb b 3 aavbbvcc

$0: 正则匹配到的字符串

$1: 在使用组匹配时,组匹配到的值

$2: 匹配值在原字符串中的索引

$3: 原字符串

诶,你刚刚不是说最少3个参数吗?出现3个参数的情况是什么

再来看一个例子:

let str = ‘aavbbvcc‘
let reg = /b+/g
str.replace(reg, ($0,$1,$2,$3)=>{
    console.log($0,$1,$2,$3)
})
//bb 3 aavbbvcc undefined

这次我没有使用组匹配,所以对应的组匹配的值也不会出来

至于最多的参数,就要看你组匹配能匹配到多少个咯

replace的应用

在知道了这些参数后,我们就可以根据实际需求进行使用
假如现在有一个需求:过滤脏话,将脏话替换成对应长度的星号

let str = ‘菜鸡前端,在线炒粉,nmsl‘
let reg = /(菜鸡|nmsl)/g
str.replace(reg, ($0)=>{
    let char = ‘‘,
        len = $0.length
        i = 0
    for(i; i < len; i++){
        char+=‘*‘
    }
    return char
})// **前端,在线炒粉,****

当然这只是基本操作,下面要查找出一段纯字母字符串中出现最多次的字符以及该字符是哪个

可能有些小伙伴会有看过这个题目,或者在面试时会被问到,方法就是通过遍历字符串,用一个对象来记录下对应的字符和出现的次数

今天我们将又学会一个方法,那就是使用 replace。这个方法是我在掘金上看到,看完后有点意想不到的效果,还挺有意思,也是促使我去重新学习一次 replace 并写下这篇笔记的初衷。

代码:

function findMaxChar(str){
    let reg = /(\w)\1+/g,
        num = 0,
        char = ‘‘
    str = str.split(‘‘).sort().join(‘‘)
    str.replace(reg,($0,$1)=>{
        if(num < $0.length){
            num = $0.length
            char = $1
        }
    })
    return `出现最多的字符:${char},次数${num}`
}

仔细解读后,相信你也会和我一样感觉到有意思

写在最后

看到一些简单的东西,我们都自认为懂了,会用了。但在仔细研究后,我们可能会发现一片新大陆。在学习过程中,我们始终要对知识抱有敬畏之心,同时要想一想简单的东西怎么能变得不简单。在了解的越多之后,才会发现自己有多渺小。

原文地址:https://www.cnblogs.com/chanwahfung/p/11369753.html

时间: 2024-08-02 07:41:25

正则replace 回调函数里接收的参数是什么?的相关文章

函数里的普通参数、指定参数、默认参数、动态参数的区别

1.普通参数就是像下面这段函数传入的参数一样,传入函数,没有默认值 1 def f(a): 2 a = a + 1 3 return a 4 5 b=f(3) 6 print(b) 2.指定参数 1 #像这样按照顺序传入的话,如果没有指定参数的值那么就会按照顺序分别给a,b,c赋初始值 2 d=f(3,4,5) 3 print(d) 4 #如果像这样指定a,b,c的值,那么它们就是指定参数,可以不按照它们原来的顺序传入 5 e=f(c=5,b=4,a=3) 6 print(e) 3.默认参数 1

ajax success回调函数里return undefined的原因?

最近在做毕业项目,注册表单里用$.ajax提交数据给服务器端php检查账号是否已经注册过,success时函数的返回值为什么总是undefined? var reg_mail = $.trim($("#reg_mail").val()).toLowerCase(); //注册邮箱获取 var reg = /^[a-z0-9]+[@][a-z0-9]+[.][a-z0-9]+$/; //设置邮箱匹配正则 if(reg.test(reg_mail)){ //如果邮箱符合规范就提交服务器进行

函数里的众多参数(逐渐补全)

在Python中定义函数,可以用必选参数.默认参数.可变参数.关键字参数和命名关键字参数,这5种参数都可以组合使用,除了可变参数无法和命名关键字参数混合.但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数/命名关键字参数和关键字参数. 比如定义一个函数,包含上述若干种参数: def f1(a, b, c=0, *args, **kw):     print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw) def f2

layer 点击yes后在回调函数里获取layer.open({})iframe里面元素

参考:http://fly.layui.com/jie/19690/ yes: function(index, layero) { uid.value = $(layero).find('iframe')[0].contentWindow.user_id.value; //将子窗口中的 user_id 抓过来 layer.close(index); //关闭弹窗 }, 原文地址:https://www.cnblogs.com/lvlin241/p/9313177.html

(转)回调函数

原文:http://blog.csdn.net/callmeback/article/details/4242260 其实回调就是一种利用函数指针进行函数调用的过程. 为什么要用回调呢?比如我要写一个子模块给你用,   来接收远程socket发来的命令.当我接收到命令后,   需要调用你的主模块的函数,   来进行相应的处理.但是我不知道你要用哪个函数来处理这个命令,     我也不知道你的主模块是什么.cpp或者.h,   或者说,   我根本不用关心你在主模块里怎么处理它,   也不应该关心

如何使用回调函数

一.什么是回调函数? 其实回调就是一种利用函数指针进行函数调用的过程. 为什么要用回调呢?比如我要写一个子模块给你用,   来接收远程socket发来的命令.当我接收到命令后,   需要调用你的主模块的函数,   来进行相应的处理.但是我不知道你要用哪个函数来处理这个命令,     我也不知道你的主模块是什么.cpp或者.h,   或者说,   我根本不用关心你在主模块里怎么处理它,   也不应该关心用什么函数处理它......   怎么办? 使用回调! -- lone wolf 使用回调函数实

回调函数(真好理解)

回调函数 在看LWIP时,见到用回调函数,再看某老外公司OPC源代码时,见到用回调函数.看我国内某些代码(我公司软件等)时没用到.于是,我对回调函数产生了很大的好奇.以前,我写VC程序时用到过回调函数,但是没有用C语言来使用.最近,看到国外大量的经典代码中广泛使用了回调函数(LWIP.某两个公司的OPC程序等),都是C语言来实现的,而不是VC windows程序中别人实现自己使用的那种. 为了弄明白这种函数的奥妙,首先提出三个问题: 1.        回调函数是什么东西? 2.        

js回调函数(callback)理解

Mark! js学习 不喜欢js,但是喜欢jquery,不解释. 自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函数了.不懂啊,于是在google回调函数,发现网上的中文解释实在是太“深奥”了,我承认自己才疏学浅了.看了几个回调的例子后,貌似有点理解了.下面是我对回调函数的理解,要是理解错了,请指正,不甚感激. 首先还是从jquery网站上的英文定义入手,身为国人,我真感到悲剧.一个回调的定义被国内的“高手”解

回调函数与PHP实例

1 什么是回调 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用.同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用:回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口:异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口).回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通