美文网首页
正则-replace

正则-replace

作者: 子心_ | 来源:发表于2019-06-14 23:52 被阅读0次

    replace: 把原有的字符替换成新的字符
    在不使用正则的情况下,每执行一次只能替换一个字符

    var str = "areyou1999areyou2312";
    str = str.replace("areyou", "areyouok").replace("areyou", "areyouok")
    // "areyouokok1999areyou2312"
    

    以上并没有实现需求,

    str = str.replace(/areyou/g, "areyouok");
    console.log(str)
    // "areyouok1999areyouok2312"
    

    replace第一项的值是一个正则,他的实现原理:
    1.首先我们和exec捕获一样,把所有和我们正则匹配的都捕获到,然后把捕获的内容替换成我们需要替换的新内容
    2./areyou/g, 按照这个正则把str中所有可以匹配的都捕获到,然后统一都替换成我们的"areyouok"

    str = str.replace(/areyou/g, function () {
      return "areyouok";
    })
    

    replace第二个参数换成函数:
    1)匿名函数执行多少次,取决于正则能在字符串中捕获多少次->正则捕两次,所以我们的匿名函数也执行两次
    2)每一次执行匿名函数,里面传递的参数值arguments和我们自己通过exec捕获到的结果是非常的类似的(即使正则有分组,我们同样可以通过arguments获取到分组捕获的内容)
    3)return:你返回的结果是啥,就相当于把当前这一次大正则捕获的内容替换成你返回的内容

    var str = "nihao123nihao456";
    str = str.replace(/\d+/g, function () {
      return 1;// 我返回的1把每一次大正则匹配捕获的内容都替换了
    })
    console.log(str); // "nihao1nihao1"
    
    var str = "nihao123nihao456";
    var reg = /(\d+)/g;
    str = str.replace(reg, function () {
    // console.log(arguments[1]); // 获取每一次执行匿名函数我们正则捕获到的第一个分组中的内容
    })
    // RegExp.$1 -> 获取第一个分组捕获的内容
    

    相关文章

      网友评论

          本文标题:正则-replace

          本文链接:https://www.haomeiwen.com/subject/nxxvfctx.html