JavaScript類似c#字串處理方法format()

admin發表於2017-12-05

熟悉c#的應該知道有format()這麼一個方法,下面就來模仿一下,JavaScript也實現此功能。

程式碼例項如下:

[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 index=0;index<arguments.length;index++){ 
        if(arguments[index]==undefined){ 
          return ""; 
        } 
        else{ 
          var reg=new RegExp ("({["+index+"]})","g"); 
          result = result.replace(reg, arguments[index]); 
        } 
      } 
    } 
    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 index=0;index<arguments.length;index++),遍歷傳遞的引數。

10.if(arguments[index]==undefined),如果為undefined,就返回空字串。

11.var reg=new RegExp("({["+index+"]})","g"),用來匹配指定的字串。

12.result=result.replace(reg,arguments),進行替換。

13.return result,返回替換後的字串。

14.return this,如果沒有傳遞引數,則返回字串本身。

三.相關閱讀:

1.arguments可以參閱javascript arguments物件一章節。 

2.typeof可以參閱javascript typeof 運算子一章節。

相關文章