如何编写正则表达式实现数字整数部分三位分组并排除小数?
解决整数部分三位分组并排除小数的正则方案
问题原因
你用的正则/\d{1,3}(?=(\d{3})*$)/g在带小数的输入里失效,是因为$匹配的是整个字符串的结尾,而小数部分的存在让整数部分的末尾不是字符串结尾,导致正向预查无法触发,最终只匹配到了小数部分的三位数字。
方案一:先提取整数部分再分组
先把字符串里的整数部分单独拎出来,再用你原来的正则处理,不管有没有小数都能正确分组:
const numStr = "1123456789.999"; // 提取整数部分:从开头到第一个小数点前的内容,没小数点就取整个字符串 const integerPart = numStr.split('.')[0]; // 用原正则做三位分组 const result = integerPart.match(/\d{1,3}(?=(\d{3})*$)/g); console.log(result); // ["1","123","456","789"]
方案二:单正则直接匹配整数部分分组
直接写正则限定只在小数点前的整数部分做三位分组:
const regex = /\d{1,3}(?=(\d{3})*(?:\.|$))/g; console.log("1123456789".match(regex)); // ["1","123","456","789"] console.log("1123456789.999".match(regex)); // ["1","123","456","789"]
正则说明
\d{1,3}:匹配1到3位数字(?=(\d{3})*(?:\.|$)):正向预查,确保当前匹配的数字后面要么是多组3位数字加小数点,要么是多组3位数字到字符串结尾,以此限定只在整数部分内分组,自动排除小数部分。其中(?:\.|$)是非捕获组,只匹配小数点或字符串结尾,不会额外捕获内容。
验证结果
- 输入
1123456789,输出["1","123","456","789"] - 输入
1123456789.999,输出["1","123","456","789"]
内容的提问来源于stack exchange,提问作者Kakamotobi
相关产品推荐
相关产品推荐

