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, 不做进一步处理。