字符串格式化
工作中我们经常碰到需要格式化时间字符串的场景
// 比如
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
网友评论