js实现replaceAll方法与正则中引用变量

在JS String对象中,有个replace方法,但对于该方法,每次替换只能替换到一个字符串,即

var a='abcda';
var b=a.replace('a','f');
console.log(b);

输出的结果是 fbcda,如果要把字符串内指定的字符串全部都替换掉,js原生是没有提供这个方法的(在Jq中倒是有replaceAll这个方法)

所以为了方便使用,可以自己写一个属于js的replaceAll

//指定字符替换函数replaceAll(stringA,'stringB')  stringA为被替换字符串 stringB为替换字符,stringC为将要替换的新字符
	function replaceAll(stringA,stringB,stringC){
		var result = stringA;
		var str = stringB;
		var traget = stringC;
		var re = new RegExp(str,'g');
		result = result.replace(re,traget);
		return result;
	}


对于这个函数,其中有一个值得注意的,就是在正则中引用变量,

一开始,我是想用字面量这样写的

result = result.replace('/' + str + '/g',traget);
以为用这种旁门左道的办法可以在正则中引用变量,发现...并不可以

但是正则构造函数中是允许引用变量的,所以改写成

var re = new RegExp(str,'g');
result = result.replace(re,traget);


对于JS中replaceAll 除了使用正则全局匹配外,还想到一个效率不太高的办法,就是用indexOf 做判断,判断要被代替的字符串内是否还存在目标字符,然后再回调自身,直到indexOf 为0  则返回代替后的。该方法我还没写,可以尝试下,不过执行效率肯定会比正则的低好多。


关于正则中引用变量的参考:

传送门: JS中给正则表达式加变量




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值