这可以在单个正则表达式中完成,不需要迭代。如果您的浏览器支持 ECMAScript 2018,您可以简单地使用环视并在正确的位置插入逗号:
搜索(?<=\d)(?=(\d\d\d)+(?!\d))
并全部替换为,
在旧版本中,JavaScript 不支持后视,因此不起作用。幸运的是,我们只需要稍微改变一下:
搜索(\d)(?=(\d\d\d)+(?!\d))
并全部替换为\1,
所以,在 JavaScript 中,这看起来像:
result = subject.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
说明:断言从字符串中的当前位置开始,可以匹配三的倍数的数字,并且当前位置还剩一个数字。
只要“点的右边”没有太多数字(否则你会得到 123,456.789,012),这也适用于小数 (123456.78)。
您还可以在 Number 原型中定义它,如下所示:
Number.prototype.format = function(){
return this.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
};
然后像这样使用它:
var num = 1234;
alert(num.format());
图片来源:Jeffrey Friedl,掌握正则表达式,第 3 期。版,第 66-67