正则实现时间字符串格式化

正则实现时间字符串格式化并在原型上实现一个方法

// 第一步: 将指定格式的时间字符串中的年月日等信息存入一个数组
var str = "2021-02-23 10:08:50", reg = /^(\d{4})[-/](\d{1,2})[-/](\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2})$/, ary = [];
str.replace(reg, function() {
    ary = ([].slice.call(arguments)).slice(1,7);
});

// 第二步: 设定好我们目标时间格式,把数组中对应的项替换到指定的区域内
var resStr = "{0}年{1}月{2}日 {3}时{4}分{5}秒";
var reg = /{(\d+)}/g;
resStr = resStr.replace(reg, function() {
    var num = arguments[1], val = ary[num];
    val.length === 1 ? val = "0" + val : void 0;
    return val;
})
console.log(resStr)

// {0}替换成2021: 我们首先要获取{0},而且我们还要获取那个0,这个0相当于我们ary数组中的索引,我们要做的就是把对应索引的内容替换我们{0}
// 每一次都会把正则匹配的内容捕获到,如果没有分组,一般是三个参数;但是如果正则中有需要捕获的分组,参数的个数就不确定了,从arguments[1]开始就是对应分组捕获的内容,arguments[0]是大正则捕获的内容
// 在String的原型上实现一个方法: 把指定时间格式的字符串换成我们想要的各种形式
String.prototype.myFormatTime = function() {
    var reg = /^(\d{4})(?:-|\/|\.|:)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})(?:\s+)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})$/g;
    var ary = [];
    this.replace(reg, function() {
        ary = ([].slice.call(arguments)).slice(1,7);
    });
    var format = arguments[0] || "{0}年{1}月{2}日 {3}:{4}:{5}";
    return format.replace(/{(\d+)}/g, function() {
        var val = ary[arguments[1]];
        return val.length === 1 ? "0" + val : val; 
    });
}
var str = "2021/2/23 15:12:33";
console.log(str.myFormatTime("{0}年{1}月{2}日"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值