从一个明确任务开始
假设要在日志中找出 ERR- 后面恰好四位数字的编号。打开正则测试工具,输入表达式 ERR-\d{4},测试文本可以用:
ERR-1042
ERR-88
WARN-2048
ERR-20245
前两行中只有 ERR-1042 符合预期,但简单表达式还会从第四行匹配出 ERR-2024。这个错误不是语法错误,而是规则过宽。
让边界符合业务要求
如果编号必须独占整行,可以使用 ^ERR-\d{4}$ 并添加 m 标志。^ 与 $ 在多行模式中对应每一行的开头和结尾。这个规则不会接受 ERR-20245,也不会把普通日志正文中的片段当作完整编号。
如果编号出现在句子中,独占整行就不合适。可以根据编号前后的分隔符另写规则,而不要直接套用上面的锚点。正则测试要先确定输入格式,再确定表达式。
标志位与转义
g查找所有匹配;本站工具会列出匹配位置,适合检查是否遗漏或多匹配。i忽略大小写。业务上区分ERR和err时不要打开它。m让^、$按行工作,不会改变点号的行为。- 点号
.表示通配字符。要匹配字面量句点,用\.。要匹配反斜杠,在表达式中也需要转义。
建立小型反例集
每次修改规则后至少测四类内容:正常输入、太短或太长的输入、大小写变化、前后混入其他字符的输入。真实任务还要加入空字符串、换行和 Unicode 文本。本站使用浏览器的 JavaScript 正则引擎;其他语言或数据库的语法、标志位可能不同,应在实际运行环境再验证一次。
不要用一条正则代替完整的数据校验。邮箱、网址、日期等复杂字段通常还需要解析、范围检查或后端验证。
本站的测试运行在独立 Worker 中,超过 600 毫秒会终止并提示超时。这能防止一个病态表达式长时间卡住页面,但不能证明表达式在生产系统里没有性能问题;还应测试接近上限的输入,并在服务端设置自己的长度和执行边界。