免费在线正则表达式测试器与调试器
直接在浏览器中构建和调试正则表达式,享受即时语法高亮和捕获组详细解析。
如何测试正则表达式
输入你的模式。
在两个斜杠之间输入正则表达式,不要带上斜杠本身。用 g、i、m、s 按钮选择标志,或加载三个示例之一。
粘贴你的测试文本。
把示例文本放进模式下方的文本框。输入时匹配会即时高亮,数量会显示模式找到了多少个匹配。
检查分组并复制。
查看每个匹配列出的捕获组。模式没问题后,将其以 /pattern/flags 的形式复制,并粘贴到你的 JavaScript 代码中。
常见问题
关于 JavaScript 正则引擎、标志和分组的解答。
如何在线测试正则表达式?
在顶部文本框中输入模式(不带斜杠),然后在下方粘贴示例文本。输入时匹配会即时高亮,匹配数量也会更新。开启 g 可查看所有匹配,而不只是第一个。
这个测试器使用哪种正则风格?
它使用 JavaScript 内置的 RegExp 引擎,也就是你的浏览器运行的 ECMAScript 风格。在这里能匹配的模式,在 JavaScript 和 TypeScript 代码中也会以同样方式匹配。PCRE、Python 和 Java 的语法可能不同,请在各自的引擎中测试这些模式。
为什么我的正则在 Python 或 PHP 中可用,在这里却不行?
JavaScript 不支持部分 PCRE 和 Python 语法。像 a++ 这样的占有量词、原子组、内联的 (?i) 标志以及 Python 的 (?P...) 命名分组,都会报 Nothing to repeat 或 Invalid group。\K 会被当作普通的 K。请用 JavaScript 语法重写这些部分。
g、i、m、s 标志分别有什么作用?
g 标志会找出所有匹配,而不是在第一个就停下。i 标志忽略大小写。开启 m 后,^ 和 $ 锚点会在每一行匹配。开启 s 后,点号也能匹配换行符。只有 g 默认开启。
支持 u、y 或 d 标志吗?
不支持。只能开启 g、i、m 和 s。没有 u 时,Unicode 属性转义无法使用,一个 emoji 会被算作两个字符,因此点号只会匹配到它的一半。含大量 Unicode 的模式,目前请在你自己的代码中测试。
如何使用命名捕获组?
在左括号后紧跟一个问号和用尖括号括起来的名称,就像内置的 word 示例那样。之后每个匹配都会按名称列出该分组,例如 word: longer。如果一个模式同时包含命名和未命名分组,则只会列出命名分组。
为什么我的模式会显示空匹配?
像 a* 或 \d* 这类可以匹配空内容的模式,在每个不符合的位置也会匹配到一个空字符串。对文本 bbb,a* 会得到 4 个空匹配。如果至少需要一个字符,请用 + 代替 *。
为什么 ^ 只匹配第一行?
没有 m 标志时,^ 和 $ 表示整段文本的开头和结尾。开启 m 后,它们会在每个换行处匹配,因此像 ^\w+ 这样的模式会找到每一行的第一个单词,而不只是第一行。
为什么某些模式会让页面卡死?
像 (a+)+$ 这样的嵌套量词会引发灾难性回溯,而且测试器没有时间限制。在对同一段代码的 Node 测试中,27 个字母大约耗时 2 秒,每多一个字母耗时就翻一倍。请收窄内部分组;如果标签页卡住,请重新加载。
可以用这个正则表达式测试器替换文本吗?
不可以,目前还没有替换模式。测试器只显示匹配和捕获组。若要规划替换,请先确认每个分组捕获的部分正确,然后在你自己代码的 String.replace 中以 $1 的形式使用它。
我测试的文本会被发送到别处吗?
测试文本不会被发送,匹配在你的浏览器中运行。在线网站上,Google Analytics 会记录每次匹配运行及其耗时。对于无效的模式,它还会收到错误信息,而在 Chrome 中该信息包含模式本身。
适用于 JavaScript 模式的正则表达式测试器功能
你的模式运行在浏览器自带的 JavaScript RegExp 引擎上,因此在这里能匹配的模式,在你的 JS 代码中也会以同样方式匹配。

输入时即时高亮正则匹配
测试文本中的每个匹配都会用颜色标出,上方的匹配数量也会随每次修改更新。开启 g 时可看到所有匹配;关闭时只显示第一个。
- 每次按键都会重新计算
- g 标志会找出所有匹配
- 匹配数量显示在文本上方

查看每个匹配的捕获组
高亮区域下方,每个匹配都有独立的一行来显示其分组。命名分组按名称显示,例如 word: longer;未命名分组则显示为 Group 1、Group 2,依此类推。
- 命名分组按名称列出
- 未匹配到内容的分组显示短横线
- 每个匹配占一行
四个标志,各一键切换
模式旁边的按钮可切换全局 (g)、忽略大小写 (i)、多行 (m) 和 dotAll (s)。g 标志默认开启。目前还不支持 u、y 或 d 标志。
了解模式失败的原因
无效的模式会在红色方框中显示引擎自身的提示,例如 Unterminated group 或 Nothing to repeat。修正模式后,匹配结果就会恢复。
从示例开始
一键加载三个示例模式:电子邮件地址、2024-01-15 这样的 ISO 日期,以及用于匹配五个及以上字母单词的命名分组。复制会将模式以 /pattern/flags 的形式放入你的剪贴板。
你的测试文本留在设备上
匹配在你的设备上运行,你测试的文本绝不会被发送。使用统计会记录匹配耗时,对于无效的模式还会记录错误信息,其中可能包含该模式。
常见正则使用场景
三个日常场景,先测试正则可以避免日后出错。
表单验证
在把邮箱、电话或邮编模式放进表单之前,先用真实样本检查它。把合格和不合格的输入分行粘贴,看看哪些能匹配。
- 粘贴有效和无效的输入,每行一个
- 开启 m,让锚点按行匹配
- 确认模式会拒绝每一个不合格样本
日志解析
从日志行中提取字段,例如 IP 地址、时间戳和状态码。从日志文件中粘贴几行,用分组捕获每个部分。
- 用编号分组捕获 IP 地址
- 匹配 2024-01-15 这样的 ISO 日期
- 为每个分组命名,让每个字段都有标签
替换前先搜索文本
在代码中编写替换步骤之前,先找出一段文本里的所有 URL、话题标签或重复单词。匹配数量会告诉你预期有多少处命中。
- 在粘贴的文本中查找 URL 和电子邮件地址
- 用反向引用找出重复的字母或单词
- 批量替换前先检查匹配数量