为了账号安全,请及时绑定邮箱和手机立即绑定

用逗号格式化数字

用逗号格式化数字

largeQ 2023-09-28 15:21:27
我构建了一个使用逗号格式化数字的函数,类似于该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);我需要你注意的是,我使用了正则表达式来分割字符串,但是,我想知道是否有办法只使用正则表达式来避免递归?即,有没有办法使用从字符串末尾开始并向左重复的正则表达式?
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

使用单个正则表达式可以更简单地完成此操作:


function transform(value) {

  return String(value).replace(/\B(?=(\d{3})+(?!\d))/g, ',');

}


// Works with string

console.log(transform("0123456789"));


// And numbers

console.log(transform(1234567890));

此正则表达式将在字符串中查找其后连续 3 位数字的任何点,并确保该点仅具有 3 位数字的整数倍。

查看完整回答
反对 回复 2023-09-28
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信