美文网首页
javascript正则表达式(五)

javascript正则表达式(五)

作者: 成熟稳重的李先生 | 来源:发表于2019-10-18 00:07 被阅读0次

    字符串格式化

    工作中我们经常碰到需要格式化时间字符串的场景

    // 比如
    let time = "2019-10-17 10:50:23";
    // => 要转化为 “2019年10月17日”或者“2019/10/17”
    // 每次都用字符串匹配,或者拆分字符串,再借助数组的方法来匹配,属实麻烦,接下来,我们自己完成一个方法“formatTime”,拿来即用
    
    ~function() {
      /*
       *  时间字符串的格式化处理
       *  @params
       *    template: [string] 我们最后期望获取日期格式的模板
       *    模板规则: {0}->年  {1-5}-> 月日时分秒
       *  @return
       *    [string]格式化后的时间字符串
      */  
      function formatTime(template = "{0}年{1}月{2}日 {3}时{4}分{5}秒") {
          // 1.首先获取时间字符串中的年月日等信息
          let timeAry = this.match(/\d+/g);
          // =>  ["2019", "10", "17", "10", "50", "23"]
          return template = template.replace(/\{(\d+)\}/g, (...[,$1]) => {
              // args第一项为匹配的结果,即{n},第二项为分组捕获到的内容,即n
              // 如果没有用“00”代替,防止没有时分秒的情况
              let time = timeAry[$1] || "00";
              return time.length < 2 ? time = "0"+time : time;
          })
      }
      /*
       *  queryUrlParams: 获取URL地址问号后面的参数信息(可能也包含hash值)
       *  @params
       *  @return
       *    把所有问号参数信息以键值对的方式存起来并且返回  [object]
      */  
      function queryUrlParams() {
          let obj = {};
          let reg = /([^?&#=]+)=([^?&#=]+)/g;
          this.replace(/([^?&#=]+)=([^?&#=]+)/g, (...[,$1,$2]) =>  obj[$1] = $2)
          this.replace(/#([^?&=#]+)/g, (...[,$1]) => obj["HASH"] = $1)
          return obj;
      }
        
        
      /*
       * millimeter: 实现大数字的千分符处理  //123456789 => 123,456,789
       *  @params
       *  @return
       *    [string]  千分符后的字符串
      */  
       function millimeter() {
           return this.replace(/\d{1,3}(?=(\d{3})+$)/g, content => content+',')   
       } 
        
      // 扩展到内置类String.prototype上   
      // 这样写方便扩展多个方法(只有单一方法,不建议使用)  
      ["formatTime", "queryUrlParams","millimeter"].forEach(item =>{
          String.prototype[item] = eval(item);
      })
    }()
    

    今天有个需求,也一并记录下

    //在画echarts折线图时, 数据值较大,一般大于100000,需要将其格式化为"x.xx万"这样
    // 这与上边我们实现的千分符有些类似
    let reg = /\d+(?=(\d{4})$)/
    let str = 789546214456;
    console.log((str+"").replace(reg, content => content+",")) //78954621,4456
    

    相关文章

      网友评论

          本文标题:javascript正则表达式(五)

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