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

使用正则表达式匹配特定格式字符串失败,寻求技术帮助

正则匹配故障排查:无法匹配特定格式字符串

我尝试用正则表达式匹配以下格式的字符串:

  • "#1 – .75 Gallon $16.99"
  • "#2 –1.6 Gallon $36.99"

但编写的JavaScript正则测试始终匹配失败,检查后没找到问题,需要帮助。

测试代码:

console.log(/^#\d\s+–\s+[0-9]*\.[0-9]+\s+[a-zA-Z]+\s+:[0-9]*\.[0-9]+$/.test('#2 – 1.6 Gallon $36.99'))

console.log(/^#\d\s+–\s+[0-9]*\.[0-9]+\s+[a-zA-Z]+\s+:[0-9]*\.[0-9]+$/.test('#1 – .75 Gallon $16.99'))

问题分析

你的正则表达式存在几个关键错误:

  1. 符号不匹配:正则里用了:,但目标字符串中价格前缀是$,且$是正则特殊字符,需要用\$转义
  2. 空格限制过严:正则中\s+–\s+强制要求连接符–前后必须有至少一个空格,但目标字符串存在–后无空格的情况(比如"#2 –1.6..."),应改为\s*–\s*允许0个或多个空格
  3. 编号位数限制:\d仅匹配单个数字,如果后续出现两位数编号(比如#10)会匹配失败,建议改为\d+支持多位数编号

修正后的正则表达式

// 测试修正后的正则
console.log(/^#\d+\s*–\s*\d*\.\d+\s+[a-zA-Z]+\s+\$\d*\.\d+$/.test('#2 – 1.6 Gallon $36.99')) // 输出 true
console.log(/^#\d+\s*–\s*\d*\.\d+\s+[a-zA-Z]+\s+\$\d*\.\d+$/.test('#1 – .75 Gallon $16.99')) // 输出 true

正则各部分说明

  • ^#\d+:匹配开头的编号,支持1位或多位数字
  • \s*–\s*:匹配连接符–,前后允许任意数量(包括0个)空格
  • \d*\.\d+:匹配体积数值,支持整数部分为空的格式(比如.75)
  • \s+[a-zA-Z]+:匹配体积单位(比如Gallon),单位前有至少一个空格
  • \s+\$\d*\.\d+$:匹配价格部分,$转义后匹配符号,后续匹配小数格式,直到字符串结尾

内容的提问来源于stack exchange,提问作者Samaha Hcndcl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:45:16