ENGINEERING PLAYBOOK
正则贪婪、懒惰与回溯
贪婪量词会先尝试较长范围,懒惰量词先尝试较短范围,但两者都受后续模式与回溯影响。应从输入边界和期望结果判断,而不是只机械添加问号。
适用人群:需要用正反样本验证贪婪、懒惰和回溯边界的前端与脚本开发人员
排查路径
- 使用短字符串可视化每一步匹配范围。
- 比较贪婪与懒惰量词的返回结果。
- 观察后续字符如何触发回溯。
- 用更明确的字符类减少无界通配。
执行步骤
- 固定输入后分别运行两种模式。
- 检查全局匹配是否产生多个结果。
- 避免对超长用户输入使用嵌套量词。
- 可用解析器表达结构时不要强行使用单个正则。
- 记录正则引擎和运行时版本。
可复制命令与示例
比较匹配范围
'<b>one</b><b>two</b>'.match(/<b>.*<\/b>/g);懒惰量词示例
'<b>one</b><b>two</b>'.match(/<b>.*?<\/b>/g);可复现任务记录
具体错误或任务
表达式 <.*> 对两个标签只返回一个跨段匹配,需要比较懒惰量词与结构化解析。
失败信号:输入 <a>one</a><a>two</a> 时得到单个从首个 < 到最后一个 > 的匹配。
最小输入
正样本、反样本、目标 JavaScript 运行时与表达式 /<.*?>/g。
验证命令或步骤
node -e "console.log('<a>one</a><a>two</a>'.match(/<.*?>/g))"预期输出
输出四个独立标签标记;若目标是解析 HTML,则应退出正则方案改用解析器。
失败输出
使用 /<.*>/g 时只得到一个跨越两段内容的长匹配。
成功判据
至少三个正样本和三个反样本通过,并记录输入长度与运行时边界。
本任务常见错误
- 只用一个成功样本
- 把懒惰量词当成结构化解析器
- 忽略大输入下的回溯成本
资料与适用边界
语法和标志依据 MDN JavaScript 正则文档;复杂标记语言应使用相应解析器而非扩大正则。
证据块复核日期:2026-09-04
相关站内页面
资料依据与复核边界
资料复核日期:2026-08-29