当前位置 : 主页 > 网络编程 > JavaScript >

js字符串格式化函数

来源:互联网 收集:自由互联 发布时间:2021-06-30
fill /** * 给 string 添加扩展,用于支持字符串模板,占位符为 {0}或者 {4/x},参数按顺序填充 * 其中, 4/x 表示,若填补串长度不足4,那么使用x填补长度至4位 * lr 表示填补方向,默认值为
fill
/**
 *  给 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());
}
网友评论