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

解释可能有点官方,我来简述对应的参数吧(我感觉应该都能看懂吧)
看得多,不如动手敲一敲,先看一个例子:
let str = 'aavbbvcc'
let reg = /(b)+/g
str.replace(reg, ($0,$1,$2,$3)=>{
console.log($0,$1,$2,$3)
})
//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}`
}
仔细解读后,相信你也会和我一样感觉到有意思
写在最后
看到一些简单的东西,我们都自认为懂了,会用了。但在仔细研究后,我们可能会发现一片新大陆。在学习过程中,我们始终要对知识抱有敬畏之心,同时要想一想简单的东西怎么能变得不简单。在了解的越多之后,才会发现自己有多渺小。
正则replace 回调函数里接收的参数是什么?的更多相关文章
- iOS下ajax回调函数里不能播放audio
iOS下audio必须监测到事件才可播放, ajax回调函数里不能播放 解决办法 在点击方法里先播放然后立即暂停,在回调函数里重新播放 onclick(function(){ $("#_wx ...
- C++: 带参数回调函数和不带参数的回调函数;
在C++中,回调函数的应用比较广泛且重要. 通过传递函数指针到其他地方,能够实现远程回调的作用,能够实现远程调用而不需要事件触发信号或者其他机制来实现,方便而快捷: 首先,回调函数有两种形式: 静态 ...
- [Perl] Getopt 函数来接收用户参数的使用
我们在linux常常用到一个程序需要加入参数,现在了解一下perl中的有关控制参数的函数.getopt.在linux有的参数有二种形式.一种是–help,另一种是-h.也就是-和–的分别.–表示完整参 ...
- JavaScript replace 回调函数用法
params.query = params.query.replace(/[\+\-\&\|\!\(\)\{\}\[\]\^\"\~\*\?\:\\]/g,function(a){ ...
- layer 点击yes后在回调函数里获取layer.open({})iframe里面元素
参考:http://fly.layui.com/jie/19690/ yes: function(index, layero) { uid.value = $(layero).find('iframe ...
- callback 回调函数
把函数a当做一个参数传入函数b <script> Array.prototype.mysort = function(callback){ let s = this; //准备向回调函数里 ...
- 解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)
由于工作当中需要用的flask_socketio,所以自己学习了一下如何使用,查阅了有关文档,当看到回调函数callback的时候,发现文档里都描述的不太清楚,最后终于琢磨出来了,分享给有需要的朋友 ...
- js回调函数(callback)理解
Mark! js学习 不喜欢js,但是喜欢jquery,不解释. 自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函 ...
- Delphi对象变成Windows控件的前世今生(关键是设置句柄和回调函数)goodx
----------------------------------------------------------------------第一步,准备工作:预定义一个全局Win控件变量,以及一个精简 ...
随机推荐
- 数据仓库ETL案例学习(一)
来自课程案例学习 某跨国食品超市的信息管理系统,每天都会记录成千上万条各地连锁超市的销售数据.基于大数据的背景,该公司的管理层决定建立FoodMart数据仓库,期望能从庞大的数据中挖掘出有商业价值 ...
- Spring源码解析之@Configuration
@Configuration简介 用于标识一个类为配置类,与xml配置效果类似 用法简介 public class TestApplication { public static void main( ...
- node真的是单线程模式吗
提到node,我们就可以立刻想到单线程.异步IO.事件驱动等字眼.首先要明确的是node真的是单线程的吗,如果是单线程的,那么异步IO,以及定时事件(setTimeout.setInterval等)又 ...
- 今天做一个项目的时候,要在一个编辑的jsp页面的textarea标签设置value属性,结果发现他没有value属性,但是是编辑页面又必须要回显要修改的内容,所以在参考了w3cschool之后很轻松的解决了这个问题。
今天做一个项目的时候,要在一个编辑的jsp页面的textarea标签设置value属性,结果发现他没有value属性,但是是编辑页面又必须要回显要修改的内容,所以在参考了w3cschool之后很轻松的 ...
- tornado的使用-参数篇
tornado的使用-参数篇
- 如何基于k8s快速搭建TeamCity(YAML分享)
前言 最近有朋友基于之前的博客<Docker最全教程之使用TeamCity来完成内部CI.CD流程(十七)>搭建TeamCity时出现了一些问题,由于平常比较忙,没有及时答复,非常抱歉. ...
- Arduino 处理JSON格式的数据
Arduino 处理JSON格式的数据 1.安装 ArduinoJson这个包 2.程序代码 # include <ArduinoJson.h> #define ALINK_BODY_FO ...
- nyoj 305 表达式求值 (递归)
表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...
- jQuery—— 选择器汇总
jQuery里的选择器有3种: 元素选择器,id选择器, 类选择器: $("div") // 选择所有<div>元素 $("#test") // ...
- 【Luogu P2471】[SCOI2007]降雨量
Luogu P2471 啊啊啊啊这真是一道史上最毒瘤的题目!!!!! 题意就是给出n个年份的降雨量 询问:"自从\(y\)年以来\(x\)年的降雨量最大"的正确性. 显然有多种情况 ...