JavaScript如何将一个变量添加到一个字符串中

3

我正在使用JavaScript和jQuery,我有一个字符串如下:

  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中是否存在类似的东西,以便避免简单的字符串连接。
谢谢你的帮助!
5个回答

5

使用字符串的 .replace() 方法

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);

谢谢,你知道有没有其他的时间可以做吗? - GibboK
1
有许多方法可以使用JavaScript的String操作方法的任意组合完成,但是.replace()是使用一条语句完成它的简单方式... - nnnnnn
有一些库实现了String.format()类型的功能,例如JavaScript中的sprintf()。如果你在Google上搜索“JavaScript String.format”,你会得到很多选项。 - nnnnnn

3

这里有一个类似于C#的String.format方法;我已经扩展了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']);

+1。或者更好的是,使用replace(new RegExp('{'+i+'}', 'g'), ...来替换多个{0}实例。 - nnnnnn
@nnnnnn 根据建议进行了修改,但只能使用更复杂的模式 '\{(' + i + ')}' 才能使其正常工作。 - Chris Moutray

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

直接使用替换怎么样:

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

0

尝试

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接