继续Mootools常用方法扩展,依然还是String类的扩展。

方法:format

说明:一个非常简单的format方法,和C#里面的format类似。这个方法会用参数来依次替换字符串中用大括号{}括起来的数字,比如用第一个参数替换{0},用第二个参数替换{1}等等。

String.implement({
    format: function() {
        ///<summary>
        /// 格式化一个字符串,替换其中用大括号包含的数字及大括号,类似C#的format
        /// 如用第一个参数替换{0}
        ///</summary>
        ///<param name="values..." type="String">相关参数</param>
        ///<returns type="STRING" />
        var s = this;
        for (var i = 0; i < arguments.length; i++) {
            s = s.replace(new RegExp("\\{" + i + "\\}", "g"), arguments[i]);
        }
        return s;
    }
}

简单示例:

// 下面将返回 'my name is Fdream, I'm a boy'
var a = 'my name is {0}, I'm a {1}'.format('Fdream', 'boy');

方法:formatBy

说明:好,这个是一个复杂而强大的format方法,几乎可以随心所欲地对你的字符串进行格式化,用模板处理时非常方便。不过注意这里的格式稍微变化了一下,是替换类似${abc}这样的字符串。其中,abc是参数对象的一个属性,${abc}讲被参数传进来的对象的abc属性的值给替换掉。在这个里面还可以使用不同的分隔符,你可以对这个属性值进行函数处理或者截取。具体请参考后面的示例。

String.implement({
    formatBy: function(obj, funs) {
        ///<summary>
        /// 用对象格式化一个字符串
        /// 可以对格式化的字符中进行指定的函数替换或者截取
        ///</summary>
        ///<param name="obj" type="object">用来替换格式的对象</param>
        ///<param name="funs" type="object">相应的替换函数</param>
        ///<returns type="STRING" />
        funs = funs || {};
        return this.replace(/\$\{([^\}]+)\}/g, function(a, b) {
            var c = b.split(':');
            var d = c[0].split('|');
            if (d.length == 1) {
                if (d[0] in obj) return c[1] ? obj[d[0]].truncate(c[1].toInt()) : obj[d[0]];
            } else {
                var f = d[1].trim();
                if ((f in funs) && (d[0] in obj)) {
                    var r = funs[f](obj[d[0]]);
                    return c[1] ? r.truncate(c[1].toInt()) : r;
                }
            }
            return a;
        })
    }
}

简单示例:

先来一个简单的用法,和上面的format类似:

var obj = { 'name': 'PPLive', 'age': '4' };
var fmt = '${name} is ${age} years old now!';
// 现在fmt就等于 'PPLive is 4 years old now!'

再来一个复杂一点的应用:

var funs = {
    sexFun: function(sex) {
        switch (sex) {
            case 1:
            case '1':
                return 'boy';
            default:
                return 'girl';
        }
    }
};
var obj = { 'name': 'Tom', 'sex': '1', 'address': 'Zhangjiang High Tech Park' };
var fmt = '${name} is a ${sex|sexFun}, address is ${address:14}';
// 现在fmt就等于 'Tom is a boy, address is Zhangjiang Hig'

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.