用逗号格式化数字

我构建了一个使用逗号格式化数字的函数,类似于该toLocaleString方法的作用。为了实现这一点,我使用了正则表达式和递归。然而,我有一种感觉,这件事本来可以做得更好。


我做了一些研究,但无法找到我正在寻找的答案。所以,我的问题是......有更好的方法吗?


function transform(value) {

    const pureNumber = parseInt(value);

    const numberParts = [];

    function format(val) {

      let formatted = val.toString().split(/(\d{3})$/).filter(i => !!i).join(",");

      const splitted = formatted.split(",");

      if(splitted.length > 1){

        numberParts.unshift(splitted[1]);

        return format(splitted[0]);

      }

      numberParts.unshift(splitted[0]);

      return numberParts.join(",");

    }   

    return format(pureNumber.toString());    

}


const data = "1234567890";

const result = transform(data);

console.log(result);

我需要你注意的是,我使用了正则表达式来分割字符串,但是,我想知道是否有办法只使用正则表达式来避免递归?即,有没有办法使用从字符串末尾开始并向左重复的正则表达式?



largeQ
浏览 95回答 1
1回答

猛跑小猪

使用单个正则表达式可以更简单地完成此操作:function transform(value) {  return String(value).replace(/\B(?=(\d{3})+(?!\d))/g, ',');}// Works with stringconsole.log(transform("0123456789"));// And numbersconsole.log(transform(1234567890));此正则表达式将在字符串中查找其后连续 3 位数字的任何点,并确保该点仅具有 3 位数字的整数倍。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript