replace的回调函数。
今天在看算法时,看到一些题目,感觉replace的回调函数好奇葩,$0 、$1什么的;
JS的replace方法:
str.replace(regexp|substr, newSubStr|function)
regexp参数是你的正则表达式
substr参数: 表示你要查找的字符/字符串
newSubStr参数: 表示你要将匹配到的字符串替换成的新字符串
function参数: 回调函数;这个回调函数又有着多个参数
replace中回调函数的参数:
| 变量名 | 代表的值 |
match |
匹配的子串。(对应于上述的$&。) |
p1,p2, ... |
假如replace()方法的第一个参数是一个 |
offset |
匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 |
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的回调函数。的更多相关文章
- js中replace的回调函数使用。
这只是一个小问题,但是之前并没有发现.这个问题就是replace的第二个函数是支持回调函数的. var ext = new RegExp('f','g'); 1.str.replace(ext ,1) ...
- js小知识-replace的回调函数
replace() 方法返回一个由替换值替换一些或所有匹配的模式后的新字符串.模式可以是一个字符串或者一个正则表达式, 替换值可以是一个字符串或者一个每次匹配都要调用的函数. 注意:原字符串不会改变. ...
- JS replace可以接受回调函数
这是js最鲜为人知的秘密之一,v 1.3首次引入.大部分情况下repalce的使用情况如下: '10 12 13 40 50'.replace(/\d+/g,'*');//用 * 替换所有的数字 这是 ...
- 正则表达式的方法:replace,match,test(replace参数可以是回调函数)
1.replace: 作用对象:字符串 功能:用于替换字符串中的某些字符 参数:(1)正则表达式 (2)要替换的字符串 或者 回调函数 var str="1 2 3 4 5 6 7 8 9& ...
- 正则replace 回调函数里接收的参数是什么?
前言 我们都知道 replace 在做替换处理方面会很常用,通常也是第一个会想到的方法.replace 第一个参数可以传入 string 或 RegExp,第二个参数可以传入 string 或 一个回 ...
- js的回调函数 一些例子
这边用bootstrap 3.0的 上传控件做例子 下面是上传控件的一段完整的 js 操作 代码. <!-- 上传缩略图控件配置 --><script> // 定义这四个全局 ...
- cocos2d-x 2.2.0 如何在lua中注册回调函数给C++
cocos2d-x内部使用tolua进行lua绑定,但是引擎并没有提供一个通用的接口让我们可以把一个lua函数注册给C++层面的回调事件.翻看引擎的lua绑定代码,我们可以仿照引擎中的方法来做.值得吐 ...
- [js]js中回调函数
//回调函数: 把一个函数当参数传给另个函数 /* function f1() { console.log('f1'); } function f2(f) { f(); console.log(1); ...
- Unity 之 C# 利用回调函数实现C++匿名函数
做C++开发的都用过匿名函数很好用,可是C#开发怎么实现呢?前几天做一个拍照功能的时候.我偶然发现某个函数假设是C++的话.用匿名函数太好了,于是開始研究C#的回调,代理.托付等,最后总算是实现了我想 ...
随机推荐
- hive中时间操作(一)
转:https://blog.csdn.net/u012474716/article/details/78925319/ hive中常用的时间为时间戳和日期格式之间的转换 常用的函数为: to_dat ...
- Load Testing Socket.IO Web Applications and Infrastructure
转自:https://medium.com/better-programming/load-testing-socket-io-web-applications-and-infrastructure- ...
- 腾讯蓝鲸cmdb部署
蓝鲸配置平台 (CMDB)http://172.16.6.10:8088 环境(单机测试): Centos6 16G 200G 依赖环境: Java 1.8.0_92 python 2.7 ZooKe ...
- 洛谷 p1968 美元汇率 题解
传送门 美元由马克转化,马克由美元转化 求最大美元 每一天只有2种选择 ①:不转化另一货币 ②:转化另一货币 典型01背包 可以开一个二维数组f[100][3] F[i][1]表示前i天获得最大美元 ...
- CSS注册页面案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- nuxtjs在vue组件中使用window对象编译报错的解决方法
我们知道nuxtjs是做服务端渲染的,他有很多声明周期是运行在服务端的,以及正常的vue声明周期mounted之前均是在服务端运行的,那么服务端是没有比如window对象的location.navag ...
- uniapp登录流程详解uni.login
uni.login(OBJECT)登录 H5平台登陆注意事项: 微信内嵌浏览器运行H5版时,可通过js sdk实现微信登陆,需要引入一个单独的js,详见普通浏览器上实现微信登陆,并非开放API,需要向 ...
- TDD(测试驱动开发)
什么是 TDDTDD 有广义和狭义之分,常说的是狭义的 TDD,也就是 UTDD(Unit Test Driven Development).广义的 TDD 是 ATDD(Acceptance Tes ...
- 利用python爬虫爬取图片并且制作马赛克拼图
想在妹子生日送妹子一张用零食(或者食物类好看的图片)拼成的马赛克拼图,因此探索了一番= =. 首先需要一个软件来制作马赛克拼图,这里使用Foto-Mosaik-Edda(网上也有在线制作的网站,但是我 ...
- win10安装ubuntu双系统遇到的问题
安装过程学习了几个博客 Ubuntu 16.04与Win10双系统双硬盘安装图解:https://www.cnblogs.com/coxiseed/p/9945202.html?tdsourcetag ...