2012-08-02 102 views
3

我使用JavaScript和jQuery,我有這樣的JavaScript如何將一個變量添加到字符串

var apiUrlAnswer = 'https://api.stackexchange.com/2.0/answers/{ids}?order=desc&sort=activity&site=stackoverflow'; 

我需要用一個變量替換{ids}的字符串。

在C#中,可以使用一種叫做

String.Format(https://api.stackexchange.com/2.0/answers/{0}?order=desc&sort=activity&site=stackoverflow, myVariable); 

我想知道是否存在在Javascript中類似的東西,所以我可以避開簡單的字符串連接方法。

感謝您的幫助!

回答

3

那麼這裏是一個的String.format(如C#);我已經擴展JavaScript的String對象包括格式的方法是這樣的:

String.format = function(stringToFormat, argsForFormat) { 

    for (var i = 0; i < argsForFormat.length; i++) { 
     var regex = new RegExp('\{(' + i + ')}', 'g'); 
     stringToFormat = stringToFormat.replace(regex, argsForFormat[i]); 
    } 

    return stringToFormat;  
}; 

你可以這樣調用

var args = [1, 'activity', 'stackoverflow', 'desc'] 
var apiUrlAnswer = 'https://api.stackexchange.com/2.0/answers/{0}?order={3}&sort={1}&site={2}'; 
var apiUrlAnswer = String.format(apiUrlAnswer, args); 

或在線版本是這樣的

var apiUrlAnswer = String.format('https://api.stackexchange.com/2.0/answers/{0}?order={3}&sort={1}&site={2}', [1, 'activity', 'stackoverflow', 'desc']); 

又如

String.format("http://{0}.{1}.com", ['www', 'stackoverflow']); 
+0

+1。尼斯。甚至更好,'替換(新的RegExp('{'+ i +'}','g'),...',以便它可以替換多個{0}'的實例。 – nnnnnn 2012-08-02 07:02:56

+0

@nnnnnn按建議修改,但可以只有讓它與一個更復雜的模式''\ {('+ i +')}''一起工作 – 2012-08-02 08:15:15

5

使用字符串.replace() method

var apiUrlAnswer = 'https://api.stackexchange.com/2.0/answers/{ids}?order=desc&sort=activity&site=stackoverflow'; 

apiUrlAnswer = apiUrlAnswer.replace("{ids}", yourVariable); 

// OR, if there might be more than one instance of '{ids}' use a regex: 
apiUrlAnswer = apiUrlAnswer.replace(/\{ids\}/g, yourVariable); 
+0

謝謝nnnnnn ..你知道替代日做嗎? – GibboK 2012-08-02 06:28:59

+1

使用JavaScript的任何組合['字符串操作方法](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/#Methods_unrelated_to_HTML)都有很多方法可以讓你喜歡,但'.replace()'是一種簡單的方法,可以用一條語句來做... – nnnnnn 2012-08-02 06:32:30

+0

PS有一些庫實現了'String.format()'類型的函數,例如,[用於JavaScript的sprintf()](http://www.diveintojavascript.com/projects/javascript-sprintf)。如果你是谷歌的「JavaScript String.format」,你會得到一堆選擇。 – nnnnnn 2012-08-02 06:42:32

0

如何只使用替換:

apiUrlAnswer = apiUrlAnswer.replace('{ids}', 'test'); 
1

如果你經常這樣做,使用正則表達式一個更強大的替代方法是使用一個客戶端模板引擎,如mustache.js。我成功地使用了它,並且它快速輕便。

var view = { 
    ids: "Andrew" 
}; 

var output = Mustache.render("https://api.stackexchange.com/2.0/answers/{{ids}}?order=desc&sort=activity&site=stackoverflow", view); 

這具有將您的數據和演示很好地分開的優點。

0

嘗試

var id = 'your_id'; 
var apiUrlAnswer = 'https://api.stackexchange.com/2.0/answers/'+id+'?order=desc&sort=activity&site=stackoverflow'; 
相關問題