码迷,mamicode.com
首页 > Windows程序 > 详细

JS仿C#的String.Format函数

时间:2016-08-20 12:59:32      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

String.prototype.format2 = function (args) {
    var s = this, vals = [], rst = [], pattern = /({|})/g, reg = s.match(pattern), matchs = s.match(/({+[-\w]+}+)/g);
    if (matchs != null) {
        if (arguments.length > 1) {
            for (var i = 0, c = arguments.length; i < c; i++) {
                if (arguments[i] != undefined) {
                    vals.push(arguments[i]);
                }
            }
        } else if (Object.prototype.toString.call(args) === ‘[object Array]‘) {
            vals = args;
        } else if (args != undefined && args != null) {
           	vals.push(args);
        }
        var len = vals.length;

        for (var i = 0, c = matchs.length; i < c; i++) {
            var _t = matchs[i], _tv = _t.replace(pattern, ‘‘), _r = _t.match(pattern);
            if (_r.length % 2 != 0 || !/^[0-9]+$/.test(_tv)) {
                throw new Error(‘输入字符串的格式不正确。‘);
            }
            var idx = parseInt(_tv, 10);
            if (idx >= len) {
                throw new Error(‘索引(从零开始)必须大于或等于零,且小于参数列表的大小。‘);
            }
            var _p = s.indexOf(_t), _c = _t.match(/{/g).length, _v = vals[idx];
            if (_v == null) {
                throw new Error(‘值不能为null。‘);
            }
            var _t1 = _t.replace(/{{/g, ‘{‘).replace(/}}/g, ‘}‘);
            rst.push(s.substr(0, _p) + (_c > 1 ? (_c % 2 != 0 ? _t1.replace(‘{‘ + idx + ‘}‘, _v) : _t1) : _v));
            s = s.substr(_p + _t.length);
        }
        rst.push(s);
        return rst.join(‘‘);
    } else if (reg != null && reg.length > 0) {
        throw new Error(‘输入字符串的格式不正确。‘);
    }
    return s;
};

仅实现了基本的功能

示例如下:

var str = ‘(X{{{{0}}}} {1}) {2} & X{0} {3} {4}_{5} * (X{0} + {6})‘;

console.log(str.format2([7, ‘>=‘, 123, ‘<‘, 123, ‘K‘, ‘B‘]));

var str = ‘你好:{0},这是用{0}写的一个仿C#的{1}函数‘;

console.log(str.format2([‘JS‘,‘format‘]));
console.log(str.format2(‘JS‘,‘format‘));

运行结果:

技术分享

JS仿C#的String.Format函数

标签:

原文地址:http://www.cnblogs.com/oukunqing/p/5790074.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!