如何用可复现样本测试 JavaScript 正则

用命中、反例、位置区间、捕获组和替换期望测试 JavaScript RegExp,并明确标志与引擎边界。

先把输入与预期写清楚

对模式 (?<code>\d{3}),用 error 404 作为正例、error xx 作为反例,再用 4040 决定是否需要锚点或单词边界。

error 404 应报告 [6, 9) 区间、匹配 404、命名组 code=404。只有需求确实需要时才分别加入 i、m、s、u 或 y。

若任务包含替换,应写出 $1 或 $<name> 的预期输出;本站替换框留空表示不生成预览,不表示删除成空字符串。

界面行为不等于所有正则引擎

本站调用当前浏览器 JavaScript RegExp,只开放 gimsuy,并为了列出多行而在内部加入全局行为;d、v 不在当前界面范围,PCRE、Python、Java、.NET 的语法、Unicode 与回溯也可能不同。

把可复现证据带回项目

在项目测试中保留至少一条预期命中、一条近似反例、空值、业务相关 Unicode、最大预计长度和长失败后缀。记录源模式与标志,并在目标运行时设置性能阈值。

常见问题

关于本文主题

为什么模式“ a ”和“a”的结果不同?

首尾空格是字面模式,本站会保留。只有需求明确允许时才裁剪;需要匹配一类空白时应显式使用 \s。

没有写 g,为什么预览仍有多条匹配?

预览内部加入全局匹配以列出全部结果。这是展示行为;若业务控制流依赖单次匹配,要在调用代码中按原标志测试。

哪些样本必须进入项目测试?

至少包括正例、近似反例、空值或缺失值、字段相关 Unicode、最大预计长度,以及一个长的对抗性不命中输入。

延伸阅读

继续探索