JS中的string.Format

时间:2014-07-11 18:25:17

标签: javascript regex

我试图在JS中模拟C#string.Format()

为此,我有一个名为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);
    }
}

我的错误在哪里?

1 个答案:

答案 0 :(得分: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"