javascript模拟C#格式化字符串
JS模拟C#字符串格式化操作
/*** **功能:字符串格式化替换操作 ***/ String.prototype.format=function(){ varargs=arguments; returnthis.replace(/\{(\d+)\}/g, function(m,i){ returnargs[i]; }); }
js实现类似c#中的字符串处理函数format():
熟悉c#的应该知道有format()这么一个方法,下面就来模仿一下,在javascript中也实现此功能。
代码实例如下:
String.prototype.format=function(args){ if(arguments.length>0){ varresult=this; if(arguments.length==1&&typeof(args)=="object"){ for(varkeyinargs){ varreg=newRegExp("({"+key+"})","g"); result=result.replace(reg,args[key]); } } else{ for(vari=0;i<arguments.length;i++){ if(arguments[i]==undefined){ return""; } else{ varreg=newRegExp("({["+i+"]})","g"); result=result.replace(reg,arguments[i]); } } } returnresult; } else{ returnthis; } } varfistStr="{0}欢迎您,希望大家能够得到想要的{1}"; varsecondStr="{webName}欢迎您,希望大家能够得到想要的{favoriate}"; varfirstOut=fistStr.format("","东西"); varsecondOut=secondStr.format({webName:"",favoriate:"东西"}); console.log(firstOut); console.log(secondOut);
以上代码是实现了我们想要的效果,下面介绍一下它的实现过程:
一.实现原理:
原理比较简单,这里长话短说,具体可以参阅代码注释。使用正则表达式找出要被替换的字符串,然后使用指定的内容替换这些字符串即可,在代码中,指定的内容有的是字符串直接量,有的则是对象的属性值。
二.代码注释:
1.String.prototype.format=function(args){{}),通过原型对象为String对象添加实例方法format,此方法就是用来处理字符串。
2.if(arguments.length>0),如果传递参数的个数大于0。
3.varresult=this,将this的引用赋值给变量result。
4.if(arguments.length==1&&typeof(args)=="object"),用来判断传递的参数是否是一个对象直接量。
5.for(varkeyinargs),遍历对象直接量中的属性。
6.varreg=newRegExp("({"+key+"})","g"),用来匹配指定的字符串。
7.result=result.replace(reg,args[key]),用属性值替换匹配的字符串。
8.else{},如果传递的不是一个对象直接量。
9.for(vari=0;i<arguments.length;i++),遍历传递的参数。
10.if(arguments==undefined),如果为undefined,就返回空字符串。
11.varreg=newRegExp("({["+i+"]})","g"),用来匹配指定的字符串。
12.result=result.replace(reg,arguments),进行替换。
13.returnresult,返回替换后的字符串。
14.returnthis,如果没有传递参数,则返回字符串本身。