2012-08-02 123 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'; 
相关问题