(?=(?:\d{3}) 可以匹配到 "333" 前面的空字串 ""
(?=(?:\d{3})+ 一到多个 但匹配里的 $ 号,或者有些人写的 (?!\b) 是啥意思呢
'8123456789'.replace(/\B(?=(?:\d{3})+$)/g,',') // 8,123,456,789
"8123456789".replace(/\B(?=(?:\d{3})+(?!\d))/g,",") // 8,123,456,789
为什么不能写成
'8123456789'.replace(/\B(?=(?:\d{3}))+$/g,',') // '8123456789'
1
weixiangzhe OP |
2
weixiangzhe OP |
3
freedomSky 2022-01-29 11:27:55 +08:00
'8123456789'.replace(/\B(?=(?:\d{3})+$)/g,',') // 8,123,456,789 #当前位置(非边界)后到结尾有 3N 个字母,则插入分隔符
"8123456789".replace(/\B(?=(?:\d{3})+(?!\d))/g,",") // 8,123,456,789 #当前位置(非边界)后面有 3N 个数字+非数字,则插入分隔符,比如 8123456789x '8123456789'.replace(/\B(?=(?:\d{3}))+$/g,',') # 这里+施加在 look ahead 上是无效的,必须在 look ahead 的内部,这里相当于没有加,$也放在 look ahead 外,我理解相当于被替换的东西不连续了(中间是 look ahead ),应该是不允许的 |
4
freedomSky 2022-01-29 11:29:24 +08:00
@freedomSky 第一行打错了,3N 个字母-》 3N 个数字
|
5
imn1 2022-01-29 12:58:14 +08:00
题外,这个只能用在整数,还不够通用,$改成(\.|$)能用在浮点数
(?!\d)估计目的也是用在兼容浮点数,只是不够明确,当然如果输入无误(排除字母乱入的情况),也是足够的 |