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

正则表达式匹配疑问:为何匹配5位数字?如何限定em/rem格式

问题原因

原正则\d{0,2}\.?\d{0,3}r?em出现匹配异常的核心原因有两个:

  • 缺少边界锚定:没有用^和$限定匹配的起始与结束位置,导致正则会从12123rem这类字符串中截取符合片段的部分完成匹配(比如拆分12123为12+123,再拼接rem),而非要求整个字符串完全符合规则。
  • 数字结构逻辑松散:\d{0,2}和\d{0,3}是独立的数字匹配规则,既允许无整数直接写小数(如.123em),也允许连续整数被拆分匹配,出现超过2位的整数部分被误判的情况。
修正后的正则

根据你需要匹配的格式,修正后的正则为:

^\d{1,2}(?:\.\d{1,3})? ?r?em$
正则规则解释
  • ^:匹配字符串开头,确保从最开始校验格式
  • \d{1,2}:匹配1-2位整数部分(避免空整数的非法格式,比如.123em)
  • (?:\.\d{1,3})?:可选的小数部分,?:表示非捕获组,\.匹配小数点,\d{1,3}匹配1-3位小数,?表示该部分可省略
  • ?:匹配整数/小数与单位之间可选的单个空格(兼容12 rem这类带空格的格式)
  • r?em:匹配em或rem两种单位
  • $:匹配字符串结尾,确保整个字符串完全符合规则
验证效果

该正则会正确匹配以下格式:

  • 12em
  • 12 rem
  • 12.345em
  • 12.345rem

同时拒绝以下非法格式:

  • 12123rem(整数部分超过2位)
  • .123em(无整数部分)
  • 12.3456em(小数部分超过3位)
  • 12remx(结尾存在多余字符)

内容的提问来源于stack exchange,提问作者Sushmit Sagar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:40:36