美文网首页
正则匹配金额,将浮点数点左边每3位添加一个逗号

正则匹配金额,将浮点数点左边每3位添加一个逗号

作者: McDu | 来源:发表于2021-03-14 13:27 被阅读0次

    方法一:

    function format(number) {
        return number && number.replace(/(?!^)(?=(\d{3})+\.)/g, ',')
    }
    

    零宽断言:
    (?!exp): 匹配后面跟的不是 exp 的位置
    (?=exp): 匹配 exp 前面的位置

    捕获:
    (exp) : 匹配 exp, 并捕获文本到自动命名的组里
    (?:exp): 匹配 exp, 不捕获匹配的文本,也不给此分组分配组号

    方法二:

    function format2(str) {
        return str.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
    }
    

    分析:

    1. \B: 正则匹配边界,边界后面必须跟着 (\d{3})+(?!\d)
    2. (\d{3})+ : 必须是一个或多个的 3 个连续数字
    3. (?!\d): 第二步中的 3 个数字不允许后面跟着数字
    4. (\d{3})+(?!\d):匹配的边界后面必须跟着 3*n (n>=1) 的数字

    方法三:

    (123455666).toLocaleString()
    

    手写一个:

    function format2(str) {
        const [front, end] = str.split('.'),
            frontLen = front.length,
            count = parseInt(frontLen / 3),
            left = frontLen % 3;
    
        let result = front.slice(0, left);
    
        const repeatStr = front.slice(left);
    
        for(let i = 0; i < count; i++) {
            result += ',' + repeatStr.slice(i * 3, i * 3 + 3)
        }
        
        end && (result += '.' + end);
    
        return result; 
    }
    

    手写第二个:

    function format4(str) {
        let  arr = [],
          count = str.length;
    
        while (count >= 3) {
          arr.unshift(str.slice(count - 3, count));
          count -= 3;
        }
    
        // 如果不是3的倍数就另外追加上去
        const left = str.length % 3;
       left && arr.unshift(str.slice(0, left))
        
       return arr.toString()
    }
    

    相关文章

      网友评论

          本文标题:正则匹配金额,将浮点数点左边每3位添加一个逗号

          本文链接:https://www.haomeiwen.com/subject/qyzxcltx.html