fill /** * 给 string 添加扩展,用于支持字符串模板,占位符为 {0}或者 {4/x},参数按顺序填充 * 其中, 4/x 表示,若填补串长度不足4,那么使用x填补长度至4位 * lr 表示填补方向,默认值为
/**
* 给 string 添加扩展,用于支持字符串模板,占位符为 {0}或者 {4/x},参数按顺序填充
* 其中, 4/x 表示,若填补串长度不足4,那么使用x填补长度至4位
* lr 表示填补方向,默认值为 l 不区分大小写
* 若不是lr,则使用默认值
* @param {string} [...args] 填充列表
* @example
* 'aaa{0}vvv{5/0R}xx'.fill('111', '222') => 'aaa111vvv22200xx'
*/
String.prototype.fill = function () {
var args = [].slice.apply(arguments);
// 当前对象就是模板字符串
var tpl = this;
/**
* @param {String} match 匹配到的结果
* @param {String} len 填充长度
* @param {String} flags 标记,填补字符以及填补位置(lr)
*/
return tpl.replace(/{([0-9]+)(\/.[lLrR]?)?}/g, function (match, len, flags) {
// 取出一个参数作为填充的值
var value = args.length ? args.shift() : '';
// 如果为空则搞成空字符串
if (value === null || value === undefined) {
value = '';
} else {
// 不为空时,搞成字符串类型
// 参数如果是对象,则会得到 [Object Object] ,所以参数不要传入对象
value = String(value).toString();
}
// 当填补长度为0时,表示不自动填补
if (len === 0) {
return value;
}
var padlen = len - value.length;
if (padlen <= 0) {
return value;
}
var padchar = flags[1];
// 默认填补在左边
var paddir = flags[2] || 'l';
var padstr = '';
for (var i = 0; i < padlen; i++) {
padstr += padchar;
}
if (/r/i.test(paddir)) {
value += padstr;
} else {
value = padstr + value;
}
return value;
});
};
使用示例(格式化日期)
function dateFormat(date) {
date = date || new Date();
// 将日期格式成 yyyy-MM-dd HH:mm:ss
return '{0}-{2/0l}-{2/0} {2/0}:{2/0}:{2/0}'
.fill(date.getFullYear(),
date.getMonth() + 1,
date.getDate(),
date.getHours(),
date.getMinutes(),
date.getSeconds());
}
