使用正则表达式实现将浮点数点左边的数每三位添加一个逗号

题目: 如何将一个浮点数点左边的数每三位添加一个逗号。(使用正则表达式的方式实现)。

function toMoney(num) {
    return num && num
        .toString()
        .replace(/(\d)(?=(\d{3})+\.)/g, function ($1, $2, $3) {
        	console.log($1, $2, $3);
            return $2 + ',';
        });
}
console.log(toMoney(1234567891.12)); 
// 1 1 891
// 4 4 891
// 7 7 891
// 1,234,567,891.12
  1. 正向前瞻(?=pattern)的用法:在任何匹配pattern的字符串开始处匹配查找字符串
    注:这是一个非捕获匹配,也就是说,该匹配不需要获取供以后使用。

  2. 分析:

  • $1, $2, $3分别代表正则匹配的括号里的值。
  • (\d{3})+\. 说明匹配3个及3的倍数个数字加“.”结尾的 如:891.567891.234567891.
  • (\d)(?=(\d{3})+\.) 说明只有匹配到该数字后有3个及3的倍数个数字加“.”结尾的该数字被匹配。比如:7891.中的7被匹配,4567891.中的4被匹配,1234567891.中的1被匹配。
  1. JS中的逻辑运算符:主要有三种:逻辑与&&、逻辑或||和逻辑非
    &&||连接语句时,两边的语句会转化为布尔类型(Boolean),然后再进行运算。
    1. 逻辑与 &&运算规则
      • 两边条件都是true的时候,结果为true

      • 只要有一个是false,结果就是false

      • 如果左边的为false,右边的就不再判断了

        var a = 2;
        if ('' && a++) { // 左边是空字符串,转换成布尔类型的就是false,右边的a++就不会进行计算了,直接跳到else,输出的a还是2。
            console.log(a);
            console.log('jinlaila');
        }else {
            console.log(a); // 2
            console.log('chuqu');
        }
        
      • 当数值参与逻辑与运算时,结果为true,那么会返回的会是第二个为真的值;如果结果为false,返回的会是第一个为假的值。
        即:只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;
        一句话: &&运算符假前真后。

    2. 逻辑或||运算规则
      1. 只要有一个是true,结果就是true
      2. 两个都是false的时候结果才是false
      3. 当左边是true的时候,后面就不会进行判断了
      4. 只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。
        一句话:||运算符真前假后。

回到一开始的函数中,根据假前真后的规则,如果&&前面是false比如我输入的如果是null那么他返回的就是num本身,如果我输入的是正常的数字,它就会根据正则匹配然后替换并返回这个结果。

这个题目的另外一个解法:

function money(num) {

    return num && num
        .toString()
        .replace(/(?!^)(?=(\d{3})+\.)/g, ',');
}

console.log(money(123123123.12)); // 123,123,123.12

还有其他非正则化的解法:戳这里

参考: 正则表达式与replace详解
正则分析–将浮点数点左边每三位添加一个逗号

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值