javascript - 一个正则替换,看不太懂
怪我咯
怪我咯 2017-04-11 13:05:16
[JavaScript讨论组]

如题,整数部分每三个加一个逗号分隔,求解析

num.replace(/\B(?=(\d{3})+(?!\d))/g, ",")

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
PHPz

这个正则表达式不是匹配的字符,而是“位置
?=作用的范围就是我标红的两个括号
\B(?=(\d{3})+(?!\d))
它的意思是什么呢?
就是说我要匹配的这个“位置”,它后面应该是一下内容——三个数字为一组,有若干个这样的组,且这样的组匹配结束后,后面没有数字了,匹配出来的位置如图(虚线表示):

于是替换的结果,就是在这些虚线所代表的位置上插入,

怪我咯

可能是不懂里面的 ?= 吧。

非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

放在括号里面用来做位置指定

(?=exp) 匹配exp前面的位置:

(?=exp)也叫零宽先行断言,它匹配文本中的某些位置,这些位置的后面能匹配给定的后缀 exp。比如 \b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如果在查找I'm singing while you're dancing.时,它会匹配singdanc

(?!exp) 匹配后面跟的不是exp的位置。

/\B(?=(\d{3})+(?!\d))/g 中,正则表达式匹配了 3 个连续数字之前的位置。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号