JS用正则表达式给一个数字的整数部分每三位加一个千位符

今天参加了一个前端笔试,最后一道题是给出一长数字,要你写一个函数返回给数字加千分符的效果

eg:传入1234567891.123,最后要输出1,234,567,891.123,问你如何实现。

我回来查了资料后发现可以用正则表达式的零宽断言来做,写是写出来了,但是有俩问题需要大佬回答,我把它们写在代码里了

var thousandBitSeparator = function(numStr){
     var b = /(?<=\d)(\d{3})/g;     //1.断言自身出现的位置的后面能匹配表达式exp,具体怎么匹配的???
     return numStr.replace(b, function($1){
          return ','+$1;
     });
}
alert(thousandBitSeparator('1234567891.123'));//1,234,567,891.123 这样挺完美的
alert(thousandBitSeparator('12345678912.123'));//1,234,567,8912.123 2.这就不符合题意了,怎么改呢???
阅读 3.4k
4 个回答
https://github.com/anran758/F...

试试这个..


经评论区小伙伴提醒..对小数点进行了容错,正则只取整数部分..

function numberWithCommas(n) {
  // 正则解释: 匹配到 \B(非单词边界)后, 后面要匹配到 (\d{3})+(?!\d)
  // (\d{3})+ 至少匹配到一次或多次三个数字
  // (?!\d) 同时后面不是数字的话, 就匹配.

  // 注意, 后面的(?=)那一段代码只是判断的规则, 匹配到后只替换掉\B
  // 而\B 元字符匹配的是非单词边界

  let num = n.toString().split('.');
  num[0] = num[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  return num.join('.');
}

console.log(numberWithCommas(12345678912.1234))    // "12,345,678,912.1234"

最简单的实现:

const thousandBitSeparator = (x) => x. toLocaleString()
\B(?=(?:\d{3})+(?:\.\d+)?$)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏