正则表达式处理每三位数字加逗号的问题

希望实现浮点数字每三位加一个逗号
网上的做法很多,看了一些,但是还是想按着自己的思路自己写

let str = "8432957983475934.84378";
let reg = new RegExp(/(?<=\d)(?=(\d{3})+(\.\d+)?$)/,'g');
console.log(str.replace(reg,','));

输出是:

8,432,957,983,475,934.84,378

目前小数点前都是对的 但是小数点后应该是不出现逗号的
麻烦大神帮忙改改

阅读 9.7k
7 个回答
function formatNumber(str){
    let reg = new RegExp(/(?<=\d)(?=(\d{3})+(\.\d+)?$)/,'g');
    let i = str.indexOf('.');
    return str.replace(reg,(...args)=>args[args.length-2]<i|i==-1?",":"");
}
let reg = new RegExp(/(?<=\d)(?=(\d{3})+\.(.\d+)?$)/,'g');

正则的问题出在最后的问号上,才会造成小数点后也会被匹配到。

console.log(new Intl.NumberFormat(navigator.language, {maximumFractionDigits:20}).format(1234567890.123456789));

给你个最直观思路(兼容整数):

  1. 整数部分转成字符串,倒序后,每3位添加一个逗号,然后再倒序即完成了整数的切割。
  2. 将处理好的整数 连接 右侧小数部分即可
var str = "8432957983475934.84378"
var result = str.split(".")[0].split('').reverse().join('').replace(/(\d{3})/g, '$1,').split('').reverse().join('') + str.replace(/(\d+\b)/,'');
console.log(result);
新手上路,请多包涵
'12345678.1233'.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, "$&,")
新手上路,请多包涵

这个可以

'16932532.546464'.replace(/(?<!^.*\..*)(?<=\d)((?=[^.]+\.)(?=(\d\d\d)+\.)|(?![^.]+\..*$)(?=(\d\d\d)+$))/g, ',')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题