Js replace() 学习笔记

时间:2021-04-10 01:23:54

最近捣鼓着学习Js,发现replace()真的很有用,替换功能杠杠的棒。

接下来看看我遇到的问题:

有两个随机给出的字符串,字符串1'xxxxxx',字符串2'====T'(这两个用作示例,其他为随机),根据这两个字符串最后输出'ooooox'。后面会给出测试用例,大家就会明白。

刚开始遇到这个问题的时候我就想这就是合并两个字符串,顺带替换了字符串1。

 var n=drone.length;
var l;
l=lamps.replace(/^(x){n}/,'o');

没错,这就是我开始的思路,以致于我后来死脑筋没转出来自己挖的坑,在替换过程中replace()被我丢弃了没使用。

然后开始动手填自己的坑,开始写方法。

第一种

 function strOperate(lamps, drone){
console.log(lamps.length,drone.length);//打印两个字符串的长度
var str="",lamps;
//根据第二个字符串的长度先把要替换的'o'先保存在字符串中;
for(var i=0;i<drone.length;i++){
str+="o";
}
//数组操作
str=str.split("");
lamps=lamps.split("");
//两个字符串长度比较
var length=lamps.length<str.length?lamps.length:str.length;
for(var i=0;i<length;i++){
lamps[i]=str[i];
}
lamps=lamps.toString().replace(/,/g,"");//字符串替换,
console.log(lamps);
}
strOperate('xxxxxx', '====T')//输出 'ooooox'

这样一个方法写下来不知道浪费了多少时间,而且代码冗长,好悲伤呀。

后来细想,我为什么一定要把自己拴在替换字符串上面呢,可以换一种思路来,就有了以下的方法。

第二种

 function flyBy(lamps, drone){
//转换为数组操作
var l=lamps.split("");
var d=drone.split("");
for(var i=0;i<d.length;i++){
//比较字符串长度大小
if(i<l.length){
l[i]='o';//直接赋值覆盖掉
}
}
console.log(l.join(""));//最后转换输出字符串
}
strOperate('xxxxxx', '====T')// 输出 'ooooox'

虽然这两个方法使用同样的原理,但是第二个方法简单明了而且可读性强,请认准第二个。

第三种使用replace()替换

 function strOperate(lamps, drone){
var str;
if(drone.length>lamps.length){
str='o'.repeat(lamps.length)
}
str=lamps.replace('x'.repeat(drone.length),'o'.repeat(drone.length))
console.log(str);
}
strOperate('xxxxxx', '====T')// 输出 'ooooox'
 //测试用例:
strOperate('xxxxxx', '====T')// 'ooooox'
strOperate('xxxxxxxxx', '==T')// 'oooxxxxxx'
strOperate('xxxxxxxxxxxxxxx', '=========T')// 'ooooooooooxxxxx'
strOperate('xxxx', '====T')// 'oooo'

方法写完了,最后还是要记下笔记的。(认真脸.png)

Replace()方法使用:

strObj.replace(regex/substr[,replacement]);

参数:

substr用一些字符串替换;

regex用一个正则表达式匹配的子串替换;

replacement为参数2,是需要替换的文本或函数;

在网上看到了一个有趣的说法,怎样在正则中传入变量,大家想一想是否跟普通的变量用加号拼接呢?

其实答案很简单,string.replace(new RegExp(key,'g'),"o");利用js的RegExp()对象就行了。

另外还有一些replace()特性没有说明,有兴趣的童鞋可以查查资料。

最后记下这些内容,来提示自己,期待下次提高。

~~~~~~~~~~~~~~~~~~2016/12/27 update~~~~~~~~~~~~~~~~~~

再来补充一下 replace()的回调函数使用!

replace() 方法的第二个参数 replacement 可以是函数,并且每个匹配到的元素都会调用该回调,最后返回的字符串作为替换使用。

先举个例子:

 var string="Hello, I am Mr yt";
var str;
str=string.replace(/[^aeiou\s]\b/gi,function (s){
console.log(s);//string, m r b
return s==s.toLowerCase()?s+'err':s+'ERR';
})
console.log(str);//最后输出"Hello, I amerr Mrerr yterr"

备注:参数s为正则匹配到的子串,最后return的就是替换的子串。

对于有变量的正则replacement 函数有4(n+3)个参数,n为分组的个数;

其中的4个参数可以理解为:

function(m,v,i,s){}

m为匹配到的字符串,v为变量值,i为在原字符串中找到匹配元素的下标索引值,s为原字符串;