You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写正则表达式实现数字整数部分三位分组并排除小数?

解决整数部分三位分组并排除小数的正则方案

问题原因

你用的正则/\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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:43:14