这可以在单个正则表达式中完成,无需迭代。如果您的浏览器支持 ECMAScript 2018,您可以简单地使用lookaround并在正确的位置插入逗号:
搜索(?<=\d)(?=(\d\d\d)+(?!\d))
并全部替换为,
在旧版本中,JavaScript 不支持lookbehind,因此这不起作用。幸运的是,我们只需要改变一点点:
搜索(\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());
图片来源:杰弗里·弗里德尔,掌握正则表达式,第三。版 http://oreilly.com/catalog/9780596528126/,p。 66-67