美文网首页
正则匹配金额,将浮点数点左边每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