Javascript: 使用正则表达式检测数字格式

Javascript: Using Regex to detect a numeral format

我有这样一个字符串:

Congratulation to {0} who won {1}{2:#,##0.##} in {3}

数组数据如下:

["Join", "USD", 10000, "Poker round 10"];

我写了一个函数来格式化那个字符串,但我的问题是无法检测到数字格式。

String.prototype.format = function (arg) {
    var rep_fn = undefined;

    if (typeof arg == "object") {
        rep_fn = function (m, k) { return arg[k]; };
    }
    else {
        var args = arguments;
        rep_fn = function (m, k) { return args[parseInt(k)]; };
    }

    return this.replace(/\{(\w+)\}/g, rep_fn);
};


var fm = "Congratulation to {0} who won {1} {2:#,##0.##} in {3}";
var data = ["Join", "USD", 10000, "Poker round 10"];
console.log(fm.format(data));

当前结果:

Congratulation to Join who won USD {2:#,##0.##} in Poker game round 10

预计:

Congratulation to Join who won USD 10,000.00 in Poker game round 10

谁有idea帮我解决一下? 非常感谢。

你有很多冗余代码。你不需要 var args = arguments。您的 else 块永远不会执行,因为 if 始终为真。

String.prototype.format = function (arg) {
    for (let i = 0; i < arg.length; i++) {
        if (typeof arg[i] == "number") {
           arg[i] = arg[i].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, ',') + ".00";
        }
    }
   return this.replace(/\{(\w+)\}/g, (m,k) => arg[k]);
};


var fm = "Congratulation to {0} who won {1} {2} in {3}";
var data = ["Join", "USD", 10000, "Poker round 10"];
console.log(fm.format(data));