博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[优化]JavaScript 格式化带有占位符字符串
阅读量:5025 次
发布时间:2019-06-12

本文共 2445 字,大约阅读时间需要 8 分钟。

/** * Format a message with placeholder. * * Examples:  * format("X{0}Y{1}Z{2}") : XYZ * format("X{0}Y{1}Z{2}", '1') : X1YZ * format("X{0}Y{1}Z{2}", '1', '2') : X1Y2Z * format("X{0}Y{1}Z{2}", '1', '2', '3') : X1Y2Z3 * format("X{0}Y{1}Z{2}", '1', '2', '3', '4') : X1Y2Z3 * ------------------------------------ * format() : null * format("X{0}Y{1}Z{2}", null) : XYZ * format(null, '1') : null * ------------------------------------ * format("{0{0}1{1}2{2}}") : {012} * format("{0{0}1{1}2{2}}", 'x') : {0x12} * format("{0{0}1{1}2{2}}", 'x', 'y') : {0x1y2} * format("{0{0}1{1}2{2}}", 'x', 'y', 'z') : {0x1y2z} *  * @Author http://blog.csdn.net/xxd851116 */function format( message ) {	if (!message) return null;	var ss = message.split(/\{\d+?\}/);	for ( var i = 0; i < ss.length; i++ ) {		if (!arguments[i + 1]) break;		ss[i] += arguments[i + 1];	}	return ss.join("");}

测试用例:

document.writeln("format(\"X{0}Y{1}Z{2}\") : "						+ format("X{0}Y{1}Z{2}") + "
");document.writeln("format(\"X{0}Y{1}Z{2}\", '1') : " + format("X{0}Y{1}Z{2}", '1') + "
");document.writeln("format(\"X{0}Y{1}Z{2}\", '1', '2') : " + format("X{0}Y{1}Z{2}", '1', '2') + "
");document.writeln("format(\"X{0}Y{1}Z{2}\", '1', '2', '3') : " + format("X{0}Y{1}Z{2}", '1', '2', '3') + "
");document.writeln("format(\"X{0}Y{1}Z{2}\", '1', '2', '3', '4') : " + format("X{0}Y{1}Z{2}", '1', '2', '3', '4') + "
");document.writeln("

");document.writeln("format() : " + format() + "
");document.writeln("format(\"X{0}Y{1}Z{2}\", null) : " + format("X{0}Y{1}Z{2}", null) + "
");document.writeln("format(null, '1') : " + format(null, '1') + "
");document.writeln("

");document.writeln("format(\"{0{0}1{1}2{2}}\") : " + format("{0{0}1{1}2{2}}") + "
");document.writeln("format(\"{0{0}1{1}2{2}}\", 'x') : " + format("{0{0}1{1}2{2}}", 'x') + "
");document.writeln("format(\"{0{0}1{1}2{2}}\", 'x', 'y') : " + format("{0{0}1{1}2{2}}", 'x', 'y') + "
");document.writeln("format(\"{0{0}1{1}2{2}}\", 'x', 'y', 'z') : " + format("{0{0}1{1}2{2}}", 'x', 'y', 'z') + "
");

上面代码存在参数顺序的bug,感谢KimSoft提出的优化方案:

String.prototype.format = function(){      var args = arguments;      return this.replace(/\{(\d+)\}/g,                          function(m,i){              return args[i];          });  }    var a = "I Love {0}, and You Love {1},Where are {0}! {4}";  alert(a.format("You","Me"));

转载于:https://www.cnblogs.com/xingxiudong/archive/2012/08/03/3986910.html

你可能感兴趣的文章
JS常用坐标
查看>>
使用”结构化的思考方式“来编码和使用”流程化的思考方式“来编码,孰优孰劣?...
查看>>
C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)【转】...
查看>>
关于git的认证方式
查看>>
字符串按照字典序排列
查看>>
IOS 开发调用打电话,发短信
查看>>
CI 框架中的日志处理 以及 404异常处理
查看>>
keepalived介绍
查看>>
css3 标签 background-size
查看>>
python itertools
查看>>
Linux内核调试技术——jprobe使用与实现
查看>>
样式、格式布局
查看>>
ubuntu设计文件权限
查看>>
Vue双向绑定原理详解
查看>>
Android基础总结(5)——数据存储,持久化技术
查看>>
关于DataSet事务处理以及SqlDataAdapter四种用法
查看>>
bootstrap
查看>>
http://lorempixel.com/ 可以快速产生假图
查看>>
工程经验总结之吹水"管理大境界"
查看>>
为什么JS动态生成的input标签在后台有时候没法获取到
查看>>