JS仿C#的String.Format函数

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‘));

运行结果:

时间: 2024-10-10 19:36:26

JS仿C#的String.Format函数的相关文章

JS添加类似C# string.Format方法

String.prototype.format=function() { if(arguments.length==0) return this; for(var s=this, i=0; i<arguments.length; i++) s=s.replace(new RegExp("\\{"+i+"\\}","g"), arguments[i]); return s; }; //占位符可以为多个 alert("http://{

通过Oracle函数SQL实现C# String.Format字符串格式化功能

语言国际化要求,开发上要求Oracle数据库SQL中对应的返回信息-Message,实现一个通用函数调用,比如:提示信息内容:条码123456当前工站在FCT!”,即通用的信息内容格式化标准为:“条码{0}当前工站在{1}!”. 在C#代码中可以通过String.Format函数占位符替换的模式实现字符串格式化输出,Oracle中暂无此函数,所以可参考String.Format反编译的相应的逻辑去实现即可: 信息内容中多个参数,是以占位符{}来表示,多个参数则用数组:通过自定义数组类型(即Tab

JS类似Java String.format的函数

String.prototype.format = String.prototype.f = function () { var s = this, i = arguments.length; while (i--) {s = s.replace(new RegExp('\\{' + i + '\\}', 'gm'), arguments[i]); } return s;}; "chen {0} hua".format("zeng") JS类似Java String

javascript js string.Format()收集

String.prototype.format = function(args) {     var result = this;     if (arguments.length > 0) {             if (arguments.length == 1 && typeof (args) == "object") {             for (var key in args) {                 if(args[key]!=

仿String()构造器函数 【总结】

需求 实现以下方法: 控制台结果: 需求分析: 首先确定new调用的this和什么对象绑定,如果跟默认返回的对象绑定肯定做不到 [ ] 这样的访问,所以要在构造器内部返回一个包装过的数组 1.length,既然前提是没有String()构造器函数,那就不能用字符串对象的length方法,所以首先要将接收的字符串包装成数组.虽说不能用字符串对象的方法,但这里还是用到了         ES5的 [ ] 中括号访问法,为了将字符串中的每一个字符做成数组中的每一项,这样length就可以直接使用数组本

js的字符串替换方法String.format

简单的一个string.format的方法去替换字符串 String.format = function () { if (arguments.length == 0) return null; var str = arguments[0]; for (var i = 1; i < arguments.length; i++) { var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm'); str = str.replace(re, arguments

delphi中的Format函数详解

首先看它的声明:[[email protected]][@21ki!] function Format(const Format: string; const Args: array of const): string; overload;[[email protected]][@21ki!] 事实上Format方法有两种形式,另外一种是三个参数的,主要区别在于它是线程安全的,[[email protected]][@21ki!]但并不多用,所以这里只对第一个介绍:[[email protect

CString中Format函数与格式输入与输出

CString中Format函数与格式输入与输出 Format是一个很常用,却又似乎很烦的方法,以下是它的完整概貌,以供大家查询之用: 格式化字符串forma("%d",12)意思是将一个整形的格式化的字符(我认为是保持其形状不变) 1).格式说明总是以%字符开始,以下是不同类型数据的格式方式%号后的说明: d输出带符号十进制数 o输出无符号八进制数 x输出无符号十六进制数 u输出无符号数 c输出单个字符 s输出一串字符 f输出实数(6位小数) e以指数形式输出实数 g选用f与e格式中

Format 函数示例

Format 函数示例本示例显示用 Format 函数做格式化输出的不同用法.对于日期分隔号(/),时间分隔号(:),以及 AM/ PM 等文本而言,其真正的显示格式会因计算机上的国际标准不同而有所差异.在开发阶段,日期与时间是以短日期的格式,配合代码的国际标准来显示的.而在运行时,短日期则是根据系统的国际标准而定,而系统的国际标准和代码的国际标准可能并不相同.本示例中是假设国际标准为 English/United States. MyTime 及 MyDate 在开发环境下,使用系统的短日期设