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 中是否存在类似的东西,这样我就可以避免简单的字符串连接。

谢谢你的帮助!

4

5 回答 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);
于 2012-08-02T06:26:55.807 回答
3

好吧,这是一个 String.format(如 c#);我已经扩展了 javascriptsString对象以包含这样的格式方法:

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']);
于 2012-08-02T06:47:09.330 回答
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);

这样做的好处是可以很好地分离您的数据和演示文稿。

于 2012-08-02T06:29:27.800 回答
0

如何只使用替换:

apiUrlAnswer = apiUrlAnswer.replace('{ids}', 'test');
于 2012-08-02T06:28:06.727 回答
0

尝试

var id = 'your_id';
var apiUrlAnswer = 'https://api.stackexchange.com/2.0/answers/'+id+'?order=desc&sort=activity&site=stackoverflow';
于 2012-08-02T06:31:17.967 回答