开发者工具 · 正则 / 字符串

正则表达式

测试/解释/常用正则库/备忘单

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 53 次使用
/ /
测试文本
匹配结果 hover 行可在原文中定位
替 换$& 整体 · $1 组 · $<name> 命名组 · $$ 字面 $
替换结果
输入正则与文本,实时匹配 copy as
常用模式库点击应用 · 自动填充配套样例文本
语法速查点击插入到正则光标处
第一节

关于本工具

About

调试正则表达式时,最怕的是表达式看起来对、跑起来错,却不知道错在哪一步。这个工具在输入正则和目标文本后,实时高亮匹配位置,同时逐段解释每个元字符和分组的实际含义。所有匹配逻辑都在浏览器本地执行,输入的文本不会离开设备——适合写爬虫规则时逐条校验、或者排查日志提取脚本里的边界漏配。

第二节

使用指南

Getting Started

使用步骤

  1. 1在「正则表达式」输入框键入模式,如 `\d{4}-\d{2}-\d{2}`,下方测试区立即高亮匹配文本
  2. 2在「测试文本」区粘贴或输入待匹配内容,匹配部分实时以背景色标记,不匹配部分保持原色
  3. 3点击「解释」按钮,右侧面板逐段解析模式含义(如 `\d` = 数字,`{4}` = 重复 4 次)
  4. 4展开「常用正则库」侧栏,按分类(邮箱 / 手机号 / URL)点击任一模板,自动填入输入框并更新匹配结果
  5. 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' 不区分大小写,正则写 hello
✓ 修复hello (加 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`。

输入正则/\d{3}-\d{4}/编译解析生成匹配引擎输入测试文本用户键入字符串匹配/失败输入替换文本(可选)执行替换全局/单次输出结果替换后文本输出结果匹配详情/位置
用户输入 本地处理 输出结果
第五节

常见问题

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 标志)。你可以检查一下文本中未匹配的数字是否是全角或特殊字符。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭