【JavaScript replace函数】当replace函数的第二个参数为函数时

  • 在学习项目构建工具时发现replace函数的第二个参数时常会为一个函数,因此想要做一下总结。

首先,ECMAScript v3规定,replace()方法的参数replacement可以是函数而不是字符串;
用法为replace(regexp/substr,函数);
此函数参数的个数需要根据捕获组的个数来定;

content.replace(regexp/substr,function(matchStr,groups,index,sourceStr){
  console.log("xxxxxxx");
  return result;
})
  • matchStr是每次正则匹配到的字符串;
  • groups是正则表达式捕获组匹配到的内容,若正则表达式没有捕获组则没有该参数;
  • groups代码的是group1、group2、group3…等等参数;
  • index是匹配项在字符串中的开始下标;
  • sourceStr是原字符串;
  • 一定要有一个返回值result且这个返回值替换的是此次匹配到的matchStr,不然会返回一个undefined。

例1:把字符串中的每个数字加一后替换原字符串

(function() {
  var str = 'aa12bb0cc789';
	console.info("原字符串:"+str);
	var newStr = str.replace(/\d/g,function(matchStr,index,sourceStr) {
	  var result = parseInt(matchStr) + 1;
    return result;
  }); 
  console.info("替换后的字符串:"+newStr);
})();

运行结果为

原字符串:aa12bb0cc789
替换后的字符串:aa23bb1cc8910

也可以在chrome调试工具中浅试一下:
在这里插入图片描述

例2:一个字符串由a-z的字母组成,把连续出现多次的字符串进行压缩。如输入:aaabbbbcccccd 输出:3a4b5cd

function compressRepeatedStr(input) {
	var result = input.replace(/([a-z])\1+/g,function(matchStr,group1) {
		return matchStr.length + group1;
	});	
	return result;
}

var input = 'aaabbbbcccccd'
var newStr = compressRepeatedStr(input)
  • 打印input结果为’aaabbbbcccccd’,打印newStr结果为’3a4b5cd’,如下:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值