数字格式化
let test1 = '1234567890'
let format = test1.replace(/(?=(\d{3})+(?!\d))/g, ',')
//(?=(\d{3})+ 3的倍数的长度左侧间隙
//间隙右侧不能为数字
\B匹配非单词边界;
\d匹配一个数字;
+是量词,表示前面的内容重复1到多次
?=是预言,表示这个位置后面的内容需要满足的条件,注意只是匹配一个位置,并不匹配具体的字符,所以是零宽;
?!也是预言,表示这个位置后面的内容不能满足的条件,注意也只是匹配一个位置,并不匹配具体的字符,所以也是零宽;
\d{3}匹配三个数字,+表示前面的内容重复1到多次,所以(\d{3})+表示三个数字的1到多次,也就是3,6,9…等3的倍数个数字的字符串;
(?!\d)匹配一个位置,这个位置后面不是数字
(?=(\d{3})+(?!\d))匹配一个位置,这个位置后面首先是3的倍数个数字的字符串,接下来的位置不是数字
/\B(?=(\d{3})+(?!\d))/g就是全局匹配一个位置,这个位置是非单词边界,然后后面是3的倍数个数字,然后是非数字。
规则A 右边是3n个数字,n>=1
匹配完之后,后面接一个非数字间隙
(?=\w{3}(?!\d))
33453435345489
33453435345-489
同理
33453435345489
(?=3)
-3-345-34-35-345489
(?=3(?!4))
同时满足
空隙1右边为3
紧接着3之后的空隙2的右边不是4
==》空隙1右边为3
紧接着3之后不是4
((?=0)|(?=2))
111110211111111
11111-0-211111111
?= + ?!【终止标志】
11111021111111111111
((?=(\w{10})(?!\d)))
1111102111-1111111111
?= + ?=
11111021115111111111
((?=(\w{10})(?=5)))
-11111021115111111111
?! + ?!
两个条件 1个间隙
\b\s+\b
去除中间空格
\b是边界 非空字符的边缘间隙
取字符串中间夹得数字
(?=\d)\d+(?=[a-zA-Z])
【左边条件间隙有6个】【右边条件间隙9个】
右边是数字的间隙+间隙右边是数字+数字右边是右边是字母的间隙
但是会匹配到最左侧的数字
(?=\s)\s+(?=\d)
会匹配到左侧的空格
替换字符右侧的数字【不取结尾间隙的数字】
(?=\d)\d+
替换空格右侧的空格【不取结尾间隙的空位符号】
(?=\s)\s+