RegExp.$1~9 被弃用后替换方法

参考文档: https://www.cnblogs.com/gaosj20210301/p/17348910.html

RegExp.$1使用: 格式化日期。

Date.prototype.Format = function(fmt)   
{ //author: meizz   
  var o = {   
    "M+" : this.getMonth()+1,             
    "d+" : this.getDate(),               
    "h+" : this.getHours(),               
    "m+" : this.getMinutes(),             
    "s+" : this.getSeconds(),            
    "q+" : Math.floor((this.getMonth()+3)/3),
    "S"  : this.getMilliseconds()         
  };   
  if(/(y+)/.test(fmt))   
    fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));   
  for(var k in o)   
    if(new RegExp("("+ k +")").test(fmt))   
  fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));   
  return fmt;   
}

替换方法: RegExp的exec方法


const FormatDate = (date:Date, fmt:string):string =>{
  const o:Map<string,number> = new Map<string,number>([
    ["M+",date.getMonth()+1],
    ["d+", date.getDate()],
    ["h+", date.getHours()],
    ["m+" , date.getMinutes()],
    ["s+" , date.getSeconds()],
    ["q+" , Math.floor((date.getMonth()+3)/3)],
    ["S"  , date.getMilliseconds() ]
  ])
  
  let re = /(y+)/
  if(re.test(fmt)) {
    const execArr = re.exec(fmt)
    if(execArr) {
      fmt=fmt.replace(execArr[1], (date.getFullYear()+"").substring(4 - execArr[1].length));   
    }
  }
  
  for(const item of o.entries()) {
    re = new RegExp("("+ item[0] +")")
    if(re.test(fmt)) {
      const execArr = re.exec(fmt)
      if(execArr) {
        fmt = fmt.replace(execArr[1], (execArr.length==1) ? (item[1]+"") : (("00"+ item[1]).substring((""+ item[1]).length)));   
      }
    }
  }
  return fmt;   
}