首页 > 解决方案 > Javascript 正则表达式到逗号分隔最后 3 位然后 2 位

问题描述

我正在寻找一个正则表达式来分隔美国逗号格式的金额,如下所示

1111111111 to 1,11,11,11,111

我试过如下

function formatNumber(num) {
  return num.toString().replace(/(\d)(?=(\d{2})*(\d{3})+(?!\d))/g, '$1,')
}

console.info(formatNumber(2665.68)) 
console.info(formatNumber(102665.68)) 
console.info(formatNumber(111102665.32)) 
console.info(formatNumber(11111111.32))

https://jsfiddle.net/tyLh82og/

基本上是最后三位数字,然后是开头的两位数字。

我发现许多正则表达式分隔 3 位数或 2 位数或 4 位数。

我尝试将 3 和数字分隔结合起来,但无法获得缺乏正则表达式知识。

请帮忙

谢谢

标签: javascriptregex

解决方案


您可以使用

.replace(/(?!^)(?=(?:\d{2})*\d{3}(?:\.|$))/g, ',')

查看正则表达式演示

细节

  • (?!^)- 不是字符串位置的开始
  • (?=(?:\d{2})*\d{3}(?:\.|$))- 在当前位置的右边,必须有
    • (?:\d{2})* - 零次或多次出现两位数
    • \d{3}- 三位数
    • (?:\.|$) -.或字符串结尾。

JavaScript 演示:

function formatNumber(num) {
  return num.toString().replace(/(?!^)(?=(?:\d{2})*\d{3}(?:\.|$))/g, ',')
}

console.info(formatNumber(2665.68)) 
console.info(formatNumber(102665.68)) 
console.info(formatNumber(111102665.32)) 
console.info(formatNumber(11111111.32))


推荐阅读