正则与文本处理指南

正则匹配不上:锚点、标志与转义排查

用命中和不命中的输入复现问题,检查整串匹配、大小写、多行模式与字符串转义。

Nav Tools ·

先准备最小输入

能匹配子串的表达式,不一定能校验整个值。以简单的 ASCII 用户名规则为例,应明确起止边界,并同时准备应命中与不应命中的输入。

下面的规则允许 3–16 个 ASCII 字母、数字或下划线,只是示例,不是通用用户名规范。

Pattern: ^[A-Za-z0-9_]{3,16}$
Pass:    dev_42
Fail:    ab
Fail:    dev-42

检查标志

i 忽略大小写,g 查找多个匹配,m 让 ^ 与 $ 使用行边界,s 让点号匹配换行符。

m 应明确使用:多行文本中某一行合法,也可能命中带锚点的表达式。如果目的是校验单个值,必须检查完整输入以及换行。

Input:    cat
          CAT
Pattern:  cat
Flags g:  cat
Flags gi: cat, CAT

区分正则与字符串的转义层

正则字面量 /\d+/ 中只有一层反斜杠;new RegExp("\\d+") 先经过 JavaScript 字符串解析,多出一层转义。JSON 字符串也有自己的转义规则。

工具的表达式输入框应填工具所需的表达式,不应盲目带上源码的引号和斜杠。本站使用 JavaScript 正则引擎,PCRE、Go 和 Python 的语法或行为可能不同。

Regex literal: /\d+/
JS constructor: new RegExp("\\d+")
Pattern field: \d+

不要只验证成功样例

根据规则补充空值、接近正确的值、换行、长输入和 Unicode。每次只改一个表达式片段,便于定位原因。

嵌套且含糊的量词可能造成灾难性回溯,应简化表达式并设置输入限制。本站测试器在独立 Worker 中运行且有超时限制;页面测试通过不等于生产性能已验证。

参考资料

← 正则与文本处理指南