javascript正则表达式(五)

2019-10-18  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读