美文网首页
从Vue源码学习replace的进阶用法

从Vue源码学习replace的进阶用法

作者: Promi5e | 来源:发表于2019-05-07 13:23 被阅读0次

    前 言

    闲来无事,也学学大神,研究下Vue源码,这一研究感觉自己弱爆了,好多基础的东西都不知道,本篇文章主要为了自己记录学习,如果能让同道中人有所提高,自是最好。

    javaScript中的replace方法

    源码先贴出来:

    /**
     * Camelize a hyphen-delimited string.
     */
    var camelizeRE = /-(\w)/g;
    var camelize = cached(function (str) {
      return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
    });
    

    看到第二个参数我直接查了一下文档,replace的语法是这样的:
    stringObject.replace(regexp/substr,replacement)
    stringObject不用说,就是个字符串;

    1. replace方法的第一个参数分两种情况:
    • substr(字符串);
    • regexp(正则表达式)
    1. replace方法的第二个参数也分两种情况:
    • 字符串(常见用法,不多说);
    • 函数(本篇重点):
      看例子,再总结:
    let str = 'my-string';
    
    str.replace('my', (...rest) => {
      console.log(...rest);  // my 0 my-string
      return '*';
    })
    // *-string
    
    str.replace(/string/g, (...rest) => {
      console.log(...rest);  // string 3 my-string
      return '*'
    })
    // my-*
    
    /**
     * 特殊情况
     */
    str.replace(/-(\w)/g, (...rest) => {
      console.log(...rest);  // -s s 2 my-string
      return '*';
    })
    // my*tring
    

    如果你对上文中 rest参数 有疑惑,请移步这里

    当replace方法第二个参数为一个函数时,此时函数有三个参数,分别为匹配字符串匹配字符串最小索引以及原字符串
    特殊情况 - 如果第一个参数是正则表达式并且正则表达式中标记了子表达式(即使用了括号),此时函数有四个参数,分别为匹配字符串正则表达式中子表达式匹配到的字符串匹配字符串最小索引以及原字符串

    扩 展

    生性多疑的我,此时在想,如果正则表达式中标记多个子表达式时会是什么情况呢?哪位大家不是说过嘛,“实践是检验真理的唯一标准”,我们操练起来:

    let str = 'my-test_String';
    
    str.replace(/(-)(\w)/g, (...rest) => {
      console.log(...rest);  // -t - t 2 my-test_String
      return '*';
    })
    // my*est_String
    

    原来当正则表达式中标记了多个子表达式时,对应的,从第二个参数开始,函数参数依次是正则表达式每个子表达式匹配的字符串,然后是匹配字符串的最小索引,最后是原字符串

    看到这里你就会明白上面的源码其实就是把用 ‘-’ 连接的字符转为驼峰命名的形式。

    相关文章

      网友评论

          本文标题:从Vue源码学习replace的进阶用法

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