添加数字千分位逗号正则分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加数字千分位逗号正则分析相关的知识,希望对你有一定的参考价值。

参考技术A

当数字比较长时,为了方便阅读和快速判断大小,会每隔三位添加一个逗号。
为了实现这个效果方法很多。其中之一就是使用正则表达式。

这个方法简介,优雅。但是正则表达式看上去有点复杂。下面就对这个正则来个细致分解;

有了上述规则就能理解这个表达式了么?很明显还是不行。就跟理解一句复杂的英语一样,每一个单词都认识,但是依旧不能理解一句话是什么意思。

我们的目的是找到插入逗号的位置。平时使用正则都是获得匹配的字符串,而匹配位置可能感觉有点陌生。什么样子的正则会返回匹配的位置呢?答案是 断言 ,也就是上述语法的 ?= , ?! 。 它匹配到的内容不会保存到匹配结果中去,最终匹配结果只是一个位置而已。

例如: (?=ar) 匹配后面跟着 ar 的位置,如下图所示。

现在再回头看 (?=(?!\\b)(\\d3)+$) ,就可以确定它返回的是满足条件的位置。满足什么条件呢?

先看 (?=(\\d3)+$) 这部分,

至于 /(?=(?!\\b)(\\d3)+$)/g 中的 (?!\\b) ,是处理最前面可能出现的逗号。如图

上述内容如有不正之处,希望各位能积极指出。

完整的JS正则规则
正则表达式实现:原理
正则表达式——正则表达式的匹配过程
正则表达式零宽断言详解(?=,?<=,?!,?<!)
在线正则练习

数字千分位格式化

将数字千分位格式化,输出字符串

如输入数字 12050100,输出字符串 12,050,100

注意:逆序判断

常见思路

转换为数组,reverse,每三位拆分

使用正则表达式

使用字符串拆分

使用数组

/**
 * 千分位格式化(使用数组)
 * @param n number
 */
export function format1(n: number): string 
    n = Math.floor(n) // 只考虑整数

    const s = n.toString()
    const arr = s.split(\'\').reverse()
    return arr.reduce((prev, val, index) => 
        if (index % 3 === 0) 
            if (prev) 
                return val + \',\' + prev
             else 
                return val
            
         else 
            return val + prev
        
    , \'\')

使用字符串

/**
 * 数字千分位格式化(字符串分析)
 * @param n number
 */
export function format2(n: number): string 
    n = Math.floor(n) // 只考虑整数

    let res = \'\'

以上是关于添加数字千分位逗号正则分析的主要内容,如果未能解决你的问题,请参考以下文章

区千分位的公式

js 金额用,隔开(千分位加逗号) 例如 100,222.123

数字千分位格式化

js处理千分位分割

怎样将word文档中数字,自动加“千分符”?

15JS实现数字千分位格式化