javascript - 用于在 JavaScript 中格式化数字的正则表达式

我需要使用 JavaScript 在网页上显示格式化的数字。我想格式化它,以便在正确的位置有逗号。我将如何使用正则表达式来做到这一点?我已经做到了这样的事情:

myString = myString.replace(/^(\d{3})*$/g, "${1},");

...然后意识到这将比我想象的更复杂(并且上面的正则表达式 甚至没有接近我需要的)。我已经进行了一些搜索,但我很难找到适合这个的东西。

基本上,我想要这些结果:

  • 45 变成 45
  • 3856 变为 3,856
  • 398868483992 变为 398,868,483,992

...你明白了。

最佳答案

这可以在单个正则表达式中完成,无需迭代。如果您的浏览器支持 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,");

说明:断言从字符串中的当前位置开始,可以匹配三的倍数的数字,并且在当前位置的左边有一个数字。

这也适用于小数 (123456.78),只要“点右侧”没有太多数字(否则你会得到 123,456.789,012)。

也可以在 Number 原型(prototype)中定义,如下:

Number.prototype.format = function(){
   return this.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
};

然后像这样使用它:

var num = 1234;
alert(num.format());

图片来源:Jeffrey Friedl,Mastering Regular Expressions, 3rd. edition,p。 66-67

https://stackoverflow.com/questions/2254185/

相关文章:

bash - 如何在 bash 中打印一些文本并用空格填充到一定宽度?

javascript - 如何在javascript中将完整日期转换为短日期?

sql-server - 如何在sql中获得小数点后2位?

visual-studio-code - 如何格式化 Visual Studio Code 项目中的

visual-studio - Razor Helper 语法自动格式化丑陋。怎么修?

sql-server - SSMS 结果到网格 - CRLF 未保留在复制/粘贴中 - 有更好的技术

perl - Perl 中的今天日期,格式为 MM/DD/YYYY

reporting-services - Reporting Services [SSRS] 表达式

ruby-on-rails - Rails(或 Ruby): Yes/No instead of T

eclipse - 如何在 Eclipse 中禁用保存时自动格式化?