您的位置:首页 > Web前端 > JavaScript

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

2017-10-12 14:41 344 查看
在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中给正则表达式加变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: