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中给正则表达式加变量
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中给正则表达式加变量
相关文章推荐
- 《面向对象程序设计与VC++实现》--Liwei_1_3 (交换 使用引用、指针、变量三种方法)
- 笔记:JS利用正则表达式实现trim方法
- js在asp页面上实现定时输出变量a的值的方法
- [转载]js正则表达式/replace替换变量方法
- js使用正则实现ReplaceAll全部替换的方法
- 在js中,实现replaceAll的方法
- 实现js的replaceAll方法
- js使用正则实现ReplaceAll全部替换的方法
- asp.net后台动态添加JS文件和css文件的引用实现方法
- 结构体内可以包含自身的指针(链表实现方法)或 引用 但不可以包含自身变量即递归 (因为这样一来结构体大小就无法确定了)
- js 字符串的replace() 方法和实现replaceAll() 方法
- js将字符串转成正则表达式的实现方法
- js使用正则实现ReplaceAll全部替换的方法
- js使用正则实现ReplaceAll全部替换的方法
- Js 实现 replaceAll 方法
- js 实现ReplaceAll 的方法
- js 实现ReplaceAll 的方法
- js 实现ReplaceAll 的方法
- js 实现ReplaceAll 的方法
- 实现js的replaceAll方法