2014-07-11 47 views
1

我試圖模擬JS中的C#string.Format()string.Format在JS

爲此,我有一個名爲string的對象和一個名爲Format()的函數在可變參數函數中傳遞一個字符串,其中包含佔位符及其值。

一個例子應該是:

string.Format("{0} - {1}", "Hello", "World"); 

必須還給我Hello - World

雖然,它給我只是「{undefined} - {undefined}」。我使用全局修飾符來獲取所有,但它不起作用。


var string = { 
    Format: function() { 
     var text = arguments[0]; 
     for (i = 1; i < arguments.length; i++) { 
      var result = text.replace(/([0-9]+)/g, arguments["$1"]); 
     } 
     console.log(result); 
    } 
} 

哪裏是我的錯誤?

+0

a。第一個索引是0,而不是1。你應該替換整個'{..}'的東西,而不僅僅是數字。 C。你永遠不會修改'text',你從不用'result'做任何事情,你永遠不會返回任何東西。 d。我甚至無法想象你認爲''$ 1「]的含義。 – Blindy

回答

2

你總是從最初的字符串開始(忽略以前的替換),並且有些部分是功能不清楚它應該如何工作。

這是基於你的總體思路工作實施:

var string = { 
    Format: function() { 
    var args = arguments, 
     result = args[0].replace(/([0-9]+)/g, function(s) { return args[+s+1] }); 
    console.log(result); 
    return result; 
    } 
} 

它記錄"{Hello} - {World}"

現在,假設你不希望保留括號,你也想確保你只更換號碼括號之間,你可以做到這一點(不調試日誌記錄):

var string = { 
    Format: function() { 
     var args = arguments; 
     return args[0].replace(/{([0-9]+)}/g, function(s) { 
      return args[+s.slice(1,-1)+1] 
     }); 
    } 
} 

它返回"Hello - World"

+0

它完美的作品!謝謝! –

+1

+1爲奇妙詳細的解決方案。 :) – zx81