我构建了一个使用逗号格式化数字的函数,类似于该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 位数字的整数倍。
添加回答
举报
0/150
提交
取消