Js replace() 方法笔记

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

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

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

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

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

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

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

第一种

 1 function strOperate(lamps, drone){
 2     console.log(lamps.length,drone.length);//打印两个字符串的长度
 3     var str="",lamps;
 4     //根据第二个字符串的长度先把要替换的'o'先保存在字符串中;
 5     for(var i=0;i<drone.length;i++){
 6         str+="o";
 7     }
 8     //数组操作
 9     str=str.split("");
10     lamps=lamps.split("");
11     //两个字符串长度比较
12     var length=lamps.length<str.length?lamps.length:str.length;
13     for(var i=0;i<length;i++){
14         lamps[i]=str[i];
15     }
16     lamps=lamps.toString().replace(/,/g,"");//字符串替换,
17     console.log(lamps);
18 }
19 strOperate('xxxxxx', '====T')//输出 'ooooox' 

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

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

第二种

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

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

第三种使用replace()替换

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

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

Replace()方法使用:

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

参数:

substr用一些字符串替换;

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

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

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

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

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

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

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

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

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

先举个例子:

1 var string="Hello, I am Mr yt";
2 var str;
3 str=string.replace(/[^aeious]/gi,function (s){
4     console.log(s);//string, m r b
5     return s==s.toLowerCase()?s+'err':s+'ERR';
6 })
7 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为原字符串;

原文地址:https://www.cnblogs.com/anniey/p/6170517.html