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));
我有这样一个字符串:
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));