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()); }