关于本工具
About调试正则表达式时,最怕的是表达式看起来对、跑起来错,却不知道错在哪一步。这个工具在输入正则和目标文本后,实时高亮匹配位置,同时逐段解释每个元字符和分组的实际含义。所有匹配逻辑都在浏览器本地执行,输入的文本不会离开设备——适合写爬虫规则时逐条校验、或者排查日志提取脚本里的边界漏配。
使用指南
Getting Started使用步骤
- 1在「正则表达式」输入框键入模式,如 `\d{4}-\d{2}-\d{2}`,下方测试区立即高亮匹配文本
- 2在「测试文本」区粘贴或输入待匹配内容,匹配部分实时以背景色标记,不匹配部分保持原色
- 3点击「解释」按钮,右侧面板逐段解析模式含义(如 `\d` = 数字,`{4}` = 重复 4 次)
- 4展开「常用正则库」侧栏,按分类(邮箱 / 手机号 / URL)点击任一模板,自动填入输入框并更新匹配结果
- 5勾选「全局匹配」或「忽略大小写」等修饰符,匹配结果即时刷新,无需重新提交
输入输出示例
| 输入 | 输出 | 说明 |
|---|---|---|
| \d{3}-\d{2}-\d{4} | 匹配 123-45-6789,不匹配 12-345-6789 | 常规:美国社保号格式,验证基本数字+连字符匹配,常见于表单验证 |
| ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ | 匹配 user@example.com,不匹配 user@.com | 常规:邮箱格式验证,覆盖用户名、域名、顶级域名的常见模式,用户最常用场景 |
| .* | 匹配任意字符串(包括空串) | 边界:贪婪匹配所有字符,包括空串,暴露正则的默认贪婪行为,新手常误以为只匹配非空 |
| ^(?!.*[<>]).*$ | 匹配 hello world,不匹配 <script> | 边界:零宽断言实现否定匹配,用于过滤 HTML 标签,展示前瞻断言的特殊用法 |
| \bcat\b | 匹配 cat,不匹配 category 中的 cat | 易错:单词边界 \b 的作用,新手常忽略边界导致误匹配子串,如 category 被匹配 |
| \d+ | 匹配 123abc456 中的 123 和 456(两个独立匹配) | 易错:默认是贪婪匹配,但 + 不会跨非数字字符,新手可能以为一次匹配整个数字串 |
| ([a-z]+)\1 | 匹配 abcabc,不匹配 abcdef | 易错:反向引用 \1 匹配相同子串,新手不理解分组编号规则,常写错引用 |
常见错误对照
1.量词默认贪婪,匹配范围超出预期
从 <div> 到 </div> 提取内容,正则写 <div>.*</div><div>.*?</div>.* 默认贪婪匹配,会从第一个 <div> 一直匹配到最后一个 </div>,而非最近的一对。加 ? 转为非贪婪模式即可。
2.字符类内元字符未转义导致逻辑错误
匹配数字或点号,正则写 [0-9.][0-9\.]字符类 [] 内大部分元字符失去特殊含义,但 . 仍表示字面点号,无需转义也能匹配。然而若想匹配 ] 或 \,仍需转义。此例实际无错,但常见误区是以为 . 在 [] 内仍是元字符。
3.忽略大小写修饰符导致匹配失败
匹配 'hello' 不区分大小写,正则写 hellohello (加 i 修饰符: /hello/i 或 (?i)hello)正则默认区分大小写。若未启用 i 修饰符,Hello 与 hello 不匹配。需在正则开头加 (?i) 或全局设置忽略大小写。
4.分组捕获与替换引用符号混淆
将 '2024-01-01' 替换为 '01/01/2024',替换字符串写 $2/$3/$1\2/\3/\1 (或 $2/$3/$1 视引擎而定)不同正则引擎替换引用语法不同:JavaScript 用 $1,Python 用 \1,Vim 用 \1。使用前需确认工具支持的语法。
5.锚点缺失导致部分匹配而非全串匹配
验证输入是否为纯数字,正则写 \d+^\d+$\d+ 只要求字符串包含连续数字,不限制开头结尾。'abc123' 也能匹配到 123。加上 ^ 和 $ 锚点才确保整个字符串仅含数字。
6.反斜杠转义层级错误(字符串与正则双重转义)
在 JavaScript 字符串中匹配反斜杠,正则写 '\''\\'在代码字符串中写正则,需先经字符串转义。匹配一个反斜杠,正则需写 \\,但字符串中每个反斜杠又需转义,最终字符串为 '\\\\'。
7.量词作用于前一个字符而非整个分组
匹配连续重复的 'ab',正则写 ab+(ab)+量词 + 只作用于紧邻的前一个字符 b,而非 'ab' 整体。要匹配 'abab' 需将 'ab' 括为分组再加量词。
8.字符类中连字符位置导致范围错误
匹配数字或连字符,正则写 [0-9-][-0-9] 或 [0-9\-]连字符在字符类中若位于两个字符之间(如 0-9),会被视为范围定义。若放在开头、结尾或转义,才表示字面连字符。
工作原理
How It Works核心公式
匹配成功 = 模式 P 在文本 T 中至少存在一个子串 S 使得 S 符合 P 的语法规则
变量说明
P正则表达式模式字符串T待匹配的原始文本ST 中与 P 匹配的子串
示例
模式 P = `\d{3}-\d{4}`,文本 T = `联系方式:010-1234`。引擎从 T 起始位置扫描,在位置 6 发现子串 `010-1234` 符合 `3位数字-4位数字` 规则,匹配成功,返回子串 `010-1234`。
常见问题
Q & A问正则里写了一些特殊符号,怎么在测试区让它匹配字符本身而不是当成语法?+
需要对这些特殊符号进行转义,即在它们前面加反斜杠 \。常见的需要转义的字符包括 . * + ? [ ] { } ( ) ^ $ | \。例如,想匹配一个点号,正则要写成 \. 而不是 .。本工具的测试区会实时高亮匹配结果,你可以先输入 \. 测试看是否只匹配到了点号;如果没转义,点号会匹配任意字符,结果会和你预期完全不同。
问为什么我写了一个正则,在别的工具上能匹配,贴到你这个工具里就不行了?+
不同工具默认使用的正则引擎和标志可能不同。本工具默认采用 JavaScript 的 RegExp 引擎(ECMAScript 规范),它不支持一些 Perl 兼容正则(PCRE)的语法,比如 (?<=) 后顾断言、递归匹配等。如果你从支持 PCRE 的工具(如 PHP、Python re 模块)复制正则,请检查是否使用了这些不兼容的语法。另外,检查一下是否开启了正确的标志(如 g 全局、i 不区分大小写),本工具界面上的标志勾选需要手动设置。
问我想匹配一个邮箱地址,写了个正则但是匹配出来好多不对的内容,是怎么回事?+
邮箱格式非常复杂,简单的正则容易误匹配。常见错误是只写了 [\w.]+@[\w.]+,这会把 123@456..789 这样的非法地址也匹配上。一个更接近实际规范的正则示例是 [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,},但它仍不完美。本工具适合快速验证你写的正则是否大致符合预期;如果需要严格校验,建议使用专门的邮箱验证库。你可以先用本工具测试你写的正则,观察它是否匹配了明显非邮箱的字符串。
问正则里的括号和竖线符号怎么配合使用?我写 (a|b)c 好像没按我想的匹配。+
括号 ( ) 用于分组,竖线 | 表示逻辑或。你写的 (a|b)c 意思是:匹配 a 或 b,后面紧跟 c,所以它能匹配 ac 或 bc。如果它没按你预想匹配,可能是括号位置问题。例如,想匹配 "abc" 或 "def",应该写成 (abc|def);如果写成 abc|def,它匹配的是 "abc" 或 "def",但括号的优先级更高。本工具的匹配结果会高亮显示,你可以输入测试文本 "ac bc abc def" 分别测试 (a|b)c 和 abc|def,观察高亮区域的差异来理解。
问我写的正则匹配出来的结果比预想的多很多,怎么缩小范围?+
匹配结果过多通常是因为量词或字符集写得太宽泛。例如,.* 会匹配尽可能多的字符(贪婪模式),可以用 *? 改为非贪婪模式,让匹配尽早停止。另外,字符集 [\s\S] 匹配任何字符,范围太大;应尽量用更具体的字符集,如只匹配数字用 \d+。还有一个常见问题是忘记使用 ^ 和 $ 来限定开头和结尾。例如,想匹配纯数字行,应该写 ^\d+$,而不是 \d+。本工具支持实时修改正则,你可以一边调整一边观察匹配数量变化,直到符合预期。
问这个工具的正则替换功能怎么用?我输了一个替换字符串,结果没变。+
本工具的替换功能需要两步操作:首先在正则输入框写好匹配模式,然后在替换输入框写替换文本,最后点击替换按钮(不是测试按钮)。注意,替换文本中可以用 $1、$2 等引用正则里括号捕获的分组。例如,正则 (\w+)@(\w+),替换文本为 $2@$1,可以把 username@domain 变成 domain@username。如果替换后没变化,请检查正则是否匹配到了文本(测试区有高亮),以及是否勾选了正确的标志(如 g 全局替换)。
问正则里用 \d 匹配数字,为什么有些数字没被匹配到?+
\d 在大多数正则引擎中默认只匹配 ASCII 数字 0-9(即半角数字)。如果你的文本中包含全角数字(如 123)或其它 Unicode 数字字符(如 ٣ 阿拉伯文数字),\d 不会匹配它们。本工具基于 JavaScript,其 \d 等同于 [0-9]。要匹配全角数字,需要显式写出字符范围,如 [0-9] 或使用 Unicode 属性转义 \p{Nd}(需启用 u 标志)。你可以检查一下文本中未匹配的数字是否是全角或特殊字符。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。