/

将数字转化为每隔三位数用逗号隔开的金额

一、正则表达式实现

可以用正则表达式实现,相关代码如下 用到的正则表达式(?: ?=),相关解释如下

1
2
3
4
5
6
7
8
moneyDelimiter(value) { let v = (value || 0).toString(); if (v.includes('.')) { return v.slice(0, v.indexOf('.')).replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') + v.slice(v.indexOf('.')); } else { return (value || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,'); } }

二、转成英文格式

后来发现了一种更简单的方式

1
2
const toMark = num => num.toLocaleString('en-US') toMark(1213865.123)

三、正则表达式中?=和?:和?!的理解

理解?:

要理解?:则需要理解捕获分组和非捕获分组的概念:

  • ()表示捕获分组,()会把每个分组里的匹配的值保存起来,使用$n(n是一个数字,表示第n个捕获组的内容)
  • (?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来

理解?=和?!

要理解?=和?!,首先需要理解前瞻,后顾,负前瞻,负后顾四个概念

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 前瞻: exp1(?=exp2) 查找exp2前面的exp1 // 后顾: (?<=exp2)exp1 查找exp2后面的exp1 // 负前瞻: exp1(?!exp2) 查找后面不是exp2的exp1 // 负后顾: (?<!exp2)exp1 查找前面不是exp2的exp1 var str="abZW863"; var reg=/ab(?=[A-Z])/; console.log(str.match(reg)); var str="abZW863"; var reg=/ab(?![A-Z])/; console.log(str.match(reg));
作者:liuk123标签:正则分类:正则表达式

本文是原创文章,采用 CC BY-NC-ND 4.0 协议, 完整转载请注明来自 liuk123