• 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为原字符串;

  • 相关阅读:
    老司机心得之时间管理"入坑"
    shell的字符串和数字的转化(数字自动做字符串处理,变量名做字符串输出用单引号)
    shell的date命令:使用方法,以及小时、分钟的计算
    一篇详细的linux中shell语言的字符串处理
    linux的string操作(字符串截取,长度计算)
    linux下数学运算器:expr命令(shell中完成数学运算)
    shell脚本格式的几点注意:格式严格,空格不能随便出现(一写就记不住)
    vim的颜色修改,高亮设置。
    pyhton exit
    python判断类型:想知道一个对象(实例或者变量)是什么类型,什么结构的
  • 原文地址:https://www.cnblogs.com/anniey/p/6170517.html
Copyright © 2020-2023  润新知