zoukankan      html  css  js  c++  java
  • 正则实现数字的千位分隔符表示法

    原文链接: https://www.cnblogs.com/yalong/p/15183715.html

    比如把 12345678,变成 12,345,678
    可见是需要把相应的位置替换成 ,

    方法一

    先弄出最后一个逗号

    使用 (?=d{3}$)就可以做到:

    var result = "12345678".replace(/(?=d{3}$)/g, ',')
    console.log(result);
      // => "12345,678"
    

    其中(?=d{3}$) 匹配 d{3}$ 前面的位置。而 d{3}$ 匹配的是目标字符串最后那 3 位数字。

    弄出所有的逗号

    因为逗号出现的位置,要求后面 3 个数字一组,也就是 d{3} 至少出现一次。 此时可以使用量词 +:

    var result = "12345678".replace(/(?=(d{3})+$)/g, ',')
    console.log(result);
    // => "12,345,678"
    

    写完正则后,要多验证几个案例,此时我们会发现问题:

     var result = "123456789".replace(/(?=(d{3})+$)/g, ',')
     console.log(result);
     // => ",123,456,789"
    

    因为上面的正则,仅仅表示把从结尾向前数,一但是 3的倍数,就把其前面的位置替换成逗号。
    因此才会出 现这个问题。
    怎么解决呢?
    我们要求匹配的到这个位置不能是开头。
    我们知道匹配开头可以使用 ^,但要求这个位置不是开头怎么办?
    (?!^) 就可以实现

      var regex = /(?!^)(?=(d{3})+$)/g;
      var result = "12345678".replace(regex, ',')
      console.log(result);
      // => "12,345,678"
      result = "123456789".replace(regex, ',');
      console.log(result);
      // => "123,456,789"
    

    那如果要支持带小数点的数呢,比如 123456.12 转成 123,456.12
    只需稍作处理即可,如下:

    var regex = /(?!^)(?=(d{3})+(.|$))/g;
    "123456.12".replace(regex, ','); // "123,456.12"
    

    就只是加个限制 ?=(d{3})+ 的后面是结束符 或者点号
    验证如下:

    var regex = /(?!^)(?=(d{3})+(.|$))/g;
    "123456.12".replace(regex, ','); // "123,456.12"
    "123456".replace(regex, ','); // "123,456"
    

    方法二

    先看代码:

    '12345.12'.replace(/d{1,3}(?=(d{3})+(.|$))/g, '$&,'); // "12,345.12"
    '312345.12'.replace(/d{1,3}(?=(d{3})+(.|$))/g, '$&,'); // "312,345.12"
    '312345'.replace(/d{1,3}(?=(d{3})+(.|$))/g, '$&,'); // "312,345"
    

    实现思路拆解

    • d{1,3} 代表1到三位的数字,
    • (?=(d{3})+(.|$)) 是三位数字并且后面是点号或者结束的字符串
    • $& 是匹配到的子串
    • '$&,'就是吧匹配到的子串加个逗号
  • 相关阅读:
    空间统计笔记之三(度量地理分布工具集,Measuring Geographic Distributions)
    空间统计笔记之四(空间关系建模工具集,Modeling Spatial Relationships)
    黑苹果WiFi&蓝牙驱动
    Hackintosh问题集结
    macOS读写NTFS磁盘分区
    Windows10 无法打开此计算机上的组策略对象。你可能没有相应的权限
    电脑C盘容量扩容
    Windows配置定时休眠和唤醒
    macOS Windows添加静态路由
    macOS使用技巧
  • 原文地址:https://www.cnblogs.com/yalong/p/15183715.html
Copyright © 2011-2022 走看看