关于正则数字添加千分号 /\B((?=(?:\d{3}))+$)/g 不太理解

2022-01-29 10:26:10 +08:00
 weixiangzhe

img

(?=(?:\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'
1377 次点击
所在节点    正则表达式
5 条回复
weixiangzhe
2022-01-29 10:26:35 +08:00
[img][/img]
weixiangzhe
2022-01-29 10:27:28 +08:00
[img][/img]
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 ),应该是不允许的
freedomSky
2022-01-29 11:29:24 +08:00
@freedomSky 第一行打错了,3N 个字母-》 3N 个数字
imn1
2022-01-29 12:58:14 +08:00
题外,这个只能用在整数,还不够通用,$改成(\.|$)能用在浮点数

(?!\d)估计目的也是用在兼容浮点数,只是不够明确,当然如果输入无误(排除字母乱入的情况),也是足够的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/831230

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX