Javascript实现C#的String.Format

String.prototype.format = function (args) {
  var formatted = this;
  if (arguments.length > 0) {
    if (arguments.length == 1 && typeof args == "object") {
      for (var key in args) {
        if (args[key] != undefined) {
          var reg = new RegExp("({" + key + "})", "g");
          formatted = formatted.replace(reg, args[key]);
        }
      }
    } else {
      for (var i = 0; i < arguments.length; i++) {
        if (arguments[i] != undefined) {
          var reg = new RegExp("({)" + i + "(})", "g");
          formatted = formatted.replace(reg, arguments[i]);
        }
      }
    }
  }
  return formatted;
}
复制代码
"我是{0},性别{1}".format("张三","男") // 我是张三,性别男
"我是{name},性别{sex}".format({name:"李四",sex:"女"}) // 我是李四,性别女
在.net c#中有非常简单易用的string.Format 静态函数可以做到:

 string.Format("http://wcf.open.cnblogs.com/blog/sitehome/paged/{0}/{1}", pageIndex, pageSize);
因为string.format这个功能用到的地方比较多, 所以就用js实现了一个简单的版本 :

复制代码
 String.format = function ()
        {
            var formatStr = arguments[0];

            if ( typeof formatStr === 'string' )
            {
                var pattern,
                    length = arguments.length;

                for ( var i = 1; i < length; i++ )
                {
                    pattern = new RegExp( '\\{' + ( i - 1 ) + '\\}', 'g' );
                    formatStr = formatStr.replace( pattern, arguments[i] );
                }
            } else
            {
                formatStr = '';
            }

            return formatStr;
        };
复制代码
以上代码给javascript String类加了一个静态方法 format, 然后其用法就和c#的 string.format一模一样了, 测试如下:

String.format('http://wcf.open.cnblogs.com/blog/sitehome/paged/{0}/{1}',1,20)
输出: "http://wcf.open.cnblogs.com/blog/sitehome/paged/1/20"
String.format('{0}+{0}+{1}={2}',1,2,1+1+2)
输出: "1+1+2=4"
String.format({name:'leonwang'},'hello,world')
输出: ""
如果第一个参数不是string类型, 就简单返回空string, 不做进一步处理。

 

posted @ 2020-06-04 09:17  吴土炮Jared  阅读(266)  评论(0编辑  收藏  举报