时间字符串格式化

  

  字符串为 '2017-5-11 10:10:00',正则 reg=/^(\d{4})[-/](\d{1,2})[-/](\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2})$/g;

  此正则代表通过若干个分组小正则,对字符串进行匹配,从左到右进行,首先匹配4个数字,[-/]代表-或/中的任意一个,再进行第二个分组匹配,由于是月份,所以匹配1、2个数字,日也如此;字符串中间的空格,可以通过实际的空格进行匹配,如要匹配多个空格,敲入空格和+即可。

//第一,将指定格式的时间字符串中的年月日等信息存在一个数组

        var str='2017-5-11 10:10:00',reg=/^(\d{4})[-/](\d{1,2})[-/](\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2})$/g,ary=[];
        str.replace(reg,function(){
            console.log(arguments) //["2017-5-11 10:10:10", "2017", "5", "11", "10", "10", "10", 0, "2017-5-11 10:10:10", callee: function, Symbol(Symbol.iterator): function]
            ary=[].slice.call(arguments);    //将arguments类数组转为数组
            ary=ary.slice(1,7);
        })
        //第二,设置目标时间格式,把数组中对应的项替换到指定的区域

        var resStr = '{0}年{1}月{2}日 {3}时{4}分{5}秒';
        

        // var ary = ['2015','6','10','14','53','0'];
        var reg = /{(\d+)}/g;
        resStr = resStr.replace(reg,function(){
            console.log(arguments);//["{0}", "0", 0, "{0}年{1}月{2}日 {3}时{4}分{5}秒", callee: function, Symbol(Symbol.iterator): function]

            var num = arguments[1],val = ary[num];
            val.length==1 ?val='0'+val : void 0;
            console.log(val);
            return val;            //将匹配到的替换为val
        })
        console.log(resStr);
        //上面的匿名函数执行的次数,取决于正则能在字符中捕获多少次,正则在resStr中捕获6次,所以我们的匿名函数执行6次    

  结果如下:2017年05月11日 10时10分00秒

posted @ 2017-05-18 22:58  未知小未来  阅读(871)  评论(0编辑  收藏  举报