js 正则实现金额分割
使用正则表达式实现金额分割
在JavaScript中,可以使用正则表达式对金额进行格式化,常见的需求包括千位分隔符的添加。以下是几种实现方法:
方法一:使用正则表达式添加千位分隔符
function formatMoney(num) {
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
console.log(formatMoney(123456789)); // 输出: "123,456,789"
解释:
\B匹配非单词边界(?=(\d{3})+(?!\d))正向先行断言,匹配后面跟着3的倍数数字且后面没有更多数字的位置
方法二:处理带小数点的金额
function formatMoneyWithDecimal(num) {
return num.toString().replace(/(\d)(?=(\d{3})+(\.\d+)?$)/g, '$1,');
}
console.log(formatMoneyWithDecimal(123456789.12)); // 输出: "123,456,789.12"
方法三:更完整的金额格式化函数
function formatCurrency(num, decimalPlaces = 2) {
const fixedNum = parseFloat(num).toFixed(decimalPlaces);
const parts = fixedNum.toString().split('.');
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return parts.join('.');
}
console.log(formatCurrency(1234567.891)); // 输出: "1,234,567.89"
方法四:处理负数和零
function formatMoneyComplete(num) {
const n = Number(num);
if (isNaN(n)) return '0.00';
const isNegative = n < 0;
const absoluteNum = Math.abs(n);
const formatted = absoluteNum.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
return isNegative ? `-${formatted}` : formatted;
}
console.log(formatMoneyComplete(-1234567.891)); // 输出: "-1,234,567.89"
console.log(formatMoneyComplete(0)); // 输出: "0.00"
注意事项
- 这些方法都假设输入是数字或可以转换为数字的字符串
- 对于国际化需求,可能需要考虑不同地区的千位分隔符(如欧洲部分地区使用点号或空格)
- 处理用户输入时应先验证和清理数据
- 对于极大或极小的数字,可能需要使用BigInt或其他特殊处理
反向操作:移除千位分隔符
function unformatMoney(str) {
return parseFloat(str.replace(/,/g, ''));
}
console.log(unformatMoney("1,234,567.89")); // 输出: 1234567.89
这些方法可以根据具体需求进行组合或调整,以满足不同的金额格式化场景。






