1、用正则实现
// 千分位
function toThousands(n) {
const num = Number(n)
const re = /\d{1,3}(?=(\d{3})+$)/g
const n1 = num.toFixed(2).replace(/^(\d+)((\.\d+)?)$/, function(s, s1, s2) {
return s1.replace(re, '$&,') + s2
})
return n1
}
console.log(toThousands(1000000)) // 1,000,000.00
正则含义
1)/\d{1,3}(?=(\d{3})+$)/g
用于在数字串中查找并匹配最多三个数字的片段,同时它预示着后续的数字将以每三个一组的形式出现直至字符串的结尾。
正则表达式逐个分析:
- \d{1,3}:这部分匹配一到三个数字。\d 是一个字符类,代表任何一个数字(0-9),{1,3} 则指定这个字符类可以重复1到3次。
- (?=(\d{3})+$):这是一个正向前瞻断言(positive lookahead assertion)。它检查当前位置之后的字符串是否符合括号内的模式,但自身并不消耗任何字符。括号内的模式 (\d{3})+ 匹配三个数字的组合,并且至少出现一次。$ 表示字符串的结尾,所以这个正向前瞻断言确保了从当前位置开始直到字符串的末尾,剩下的部分必须是三个数字的组合重复出现。
- /g:全局匹配标志,表示在整个目标字符串中查找所有匹配项,而不仅仅停止在第一个匹配上。