Javascript字符串的格式化
格式化字符串
<!-- lang: js --> String.prototype.format = function(args) { var result = this; if (arguments.length < 1) { return result; } var data = arguments; //如果模板参数是数组 if (arguments.length == 1 && typeof (args) == "object") { //如果模板参数是对象 data = args; } for (var key in data) { var value = data[key]; if (undefined != value) { result = result.replace("{" + key + "}", value); } } return result; }
版本2
<!-- lang: js --> /** * 替换所有匹配exp的字符串为指定字符串 * @param exp 被替换部分的正则 * @param newStr 替换成的字符串 */ String.prototype.replaceAll = function (exp, newStr) { return this.replace(new RegExp(exp, "gm"), newStr); }; /** * 原型:字符串格式化 * @param args 格式化参数值 */ String.prototype.format = function(args) { var result = this; if (arguments.length < 1) { return result; } var data = arguments; // 如果模板参数是数组 if (arguments.length == 1 && typeof (args) == "object") { // 如果模板参数是对象 data = args; } for ( var key in data) { var value = data[key]; if (undefined != value) { result = result.replaceAll("\\{" + key + "\\}", value); } } return result; }
使用方法:
<!-- lang: js --> //两种调用方式 var template1="我是{0},今年{1}了"; var result1=template1.format("loogn",22); var template2="我是{name},今年{age}了"; var result2=template2.format({name:"loogn",age:22}); //两个结果都是"我是loogn,今年22了"
对于版本2使用了正则表达式(replaceaAll),意味着当文本中出现多个替换位时,都可以被替换。
<!-- lang: js --> var template1="我是{0},今年{1}了, lucy今年也{1}了"; var result1=template1.format("loogn",22); //结果是"我是loogn,今年22了, lucy今年也22了"