JS 模擬C# 字符串格式化操作
/*** ** 功能: 字符串格式化替換操作 ***/ String.prototype.format = function () { var args = arguments; return this.replace(/\{(\d+)\}/g, function (m, i) { return args[i]; }); }
js實現類似c#中的字符串處理函數format():
熟悉c#的應該知道有format()這麼一個方法,下面就來模仿一下,在javascript中也實現此功能。
代碼實例如下:
String.prototype.format=function(args){ if(arguments.length>0){ var result=this; if(arguments.length==1&&typeof(args)=="object"){ for(var key in args){ var reg=new RegExp("({"+key+"})","g"); result=result.replace(reg, args[key]); } } else{ for(var i=0;i<arguments.length;i++){ if(arguments[i]==undefined){ return ""; } else{ var reg=new RegExp ("({["+i+"]})","g"); result = result.replace(reg, arguments[i]); } } } return result; } else{ return this; } } var fistStr="{0}歡迎您,希望大家能夠得到想要的{1}"; var secondStr="{webName}歡迎您,希望大家能夠得到想要的{favoriate}"; var firstOut=fistStr.format("","東西"); var secondOut=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.var result=this,將this的引用賦值給變量result。
4.if(arguments.length==1&&typeof(args)=="object"),用來判斷傳遞的參數是否是一個對象直接量。
5.for(var key in args),遍歷對象直接量中的屬性。
6.var reg=new RegExp("({"+key+"})","g"),用來匹配指定的字符串。
7.result=result.replace(reg,args[key]),用屬性值替換匹配的字符串。
8.else{},如果傳遞的不是一個對象直接量。
9.for(var i=0;i<arguments.length;i++),遍歷傳遞的參數。
10.if(arguments==undefined),如果為undefined,就返回空字符串。
11.var reg=new RegExp("({["+i+"]})","g"),用來匹配指定的字符串。
12.result=result.replace(reg,arguments),進行替換。
13.return result,返回替換後的字符串。
14.return this,如果沒有傳遞參數,則返回字符串本身。