Skip to main content
UFOZoo

正则表达式测试 在线调试正则匹配表达式工具

实时匹配测试 JavaScript 正则表达式,显示分组捕获、语法错误和匹配统计,与浏览器原生引擎结果一致,适合调试正则、日志分析和数据提取等场景。

更新于 2026-08-16

相关工具

功能特性

  • 实时匹配高亮:输入模式或测试字符串时匹配结果立即高亮显示
  • 捕获组可视化:所有编号和命名分组以结构化表格展示其匹配内容
  • 详细匹配信息:每个匹配显示精确位置(索引)、长度和完整匹配文本
  • 正则标志切换:一键切换全局(g)、忽略大小写(i)、多行(m)、单行(s)、Unicode(u) 模式
  • 替换测试模式:测试替换模式中的 $1、$2 反向引用,实时查看替换结果
  • 常用正则库,一键加载预置模式:邮箱、URL、手机号、IP 地址、日期、密码验证等
  • 语法错误检测:正则无效时显示清晰易懂的错误提示信息
  • 匹配统计:总匹配数、捕获组数和处理时间显示在状态栏
  • 一键复制模式或匹配结果到剪贴板,方便与团队成员分享
  • 完全兼容 JavaScript RegExp 引擎,使用浏览器原生引擎,结果与生产代码完全一致
  • 首次加载后支持离线使用

使用方法

  1. 1在顶部「正则表达式」输入框中输入你的模式。可以使用斜杠格式(/pattern/)或直接输入原始模式(不含分隔符)。
  2. 2切换标志按钮:g(全局:查找所有匹配)、i(忽略大小写)、m(多行:^$ 匹配行边界)、s(单行:点号匹配换行符)、u(Unicode 完整支持)。
  3. 3在下方输入区域粘贴或输入测试字符串。输入时自动高亮显示匹配内容。
  4. 4在右侧面板查看详细匹配信息:每个匹配的位置、长度、捕获组和完整文本。
  5. 5切换到「替换」模式测试替换操作。输入包含 $1、$2 引用的替换字符串来使用捕获组。
  6. 6点击「常用模式」库中的预设快速加载常用正则,如邮箱验证或 URL 匹配。
  7. 7使用工具栏按钮复制模式或结果。需要时可下载匹配结果为文本文件。
  8. 8查看正则解释区域了解每个模式片段的含义,帮助学习正则语法。

常见问题

什么是正则表达式?

正则表达式(regex 或 regexp)是定义搜索模式的字符序列。用于基于模式规则查找、替换、验证和提取文本。例如 `\d{3}-\d{4}` 匹配如 "555-1234" 的电话号码格式。几乎所有编程语言(JavaScript、Python、Java、PHP、Go)和文本编辑器(VS Code、Sublime Text)都支持正则。本工具使用 JavaScript 原生 RegExp 引擎,结果与你的 JS 代码完全一致。(参见:MDN RegExp documentation)

正则标志是什么意思?

标志修改正则引擎的行为方式: • **g (全局)**:查找所有匹配,而不是找到第一个就停止 • **i (忽略大小写)**:大小写字母互换匹配:/hello/i 可以匹配 "Hello"、"HELLO"、"hello" • **m (多行模式)**:让 ^ 和 $ 匹配每行的开头/结尾,而非整个字符串 • **s (单行/dotAll)**:让点号(.)也能匹配换行符 • **u (Unicode)**:启用完整 Unicode 支持,包括表情符号、中日韩文字和 Unicode 属性转义如 \p{Script=Han}(参见:MDN RegExp documentation)

捕获组是如何工作的?

捕获组是用括号(...)括起来的正则部分,用于提取每个匹配的特定片段。例如 `(\d{3})-(\d{4})` 对 "555-1234" 创建两个组:第1组="555",第2组="1234"。可以用 `(?<name>...)` 语法命名分组以便引用:`(?<area>\d{3})-(?<number>\d{4})`。在替换字符串中用 $1、$2(编号)或 $<name>(命名)引用组。非捕获组 `(?:...)` 只分组不捕获;当你需要分组逻辑但不需要提取值时使用。

为什么我的正则显示为无效?

常见导致正则无效的原因:未转义的特殊字符(用 \\ 表示字面反斜杠,\. 表示字面点号)、括号不匹配(每个开括号(都要有对应的闭括号))、无效量词位置(不能在不存在的组后面放 +),或不支持的 JavaScript 语法(反向断言要求固定宽度,不支持递归模式)。错误消息会精确显示解析失败的位置;寻找红色错误指示器附近的问题字符。建议:从简单开始,逐步增加复杂度,每次修改后都测试。

支持 PCRE 或 Python 正则吗?

本工具使用 JavaScript 原生 RegExp 引擎(ECMAScript 标准)。覆盖大多数跨语言共用的正则语法:字符类(\d、\w、\s)、量词(*、+、?、{n,m})、锚点(^、$、\b)、前瞻断言((?=...)、(?!...))和命名捕获组。但某些功能有差异:Python 的递归((?R))不可用,PCRE 的条件模式((?ifthen|else))不工作,占有量词(x++ JS 2024+)支持有限。针对特定语言测试时,请将工具输出与目标运行时对比;原生引擎确保 JavaScript/TypeScript 项目的准确性。

如何在这里测试用 C#、Java 或 PHP 写的正则?

本工具使用 JavaScript 原生 RegExp 引擎,覆盖大多数通用语法:字符类、量词、锚点、前瞻和命名捕获组。注意引擎差异:C# 支持可变长度后顾(JS 要求定长),Java 支持 \Q...\E 引用,PHP/PCRE 支持递归 ((?R)) 和条件模式;这些在 JS 中都不存在。先把模式改成 JS 语法,再与目标运行时的结果对比验证,因为同一个模式在 C#、Java、PHP 或 .NET 中可能表现不同。

为什么我的正则看起来正确却匹配不到任何内容?

先查看不见的元凶:测试字符串末尾的多余空格或制表符;换行符:Windows 文件用 \r\n,未开 m 标志时 ^ 和 $ 锚定整个字符串,未开 s 标志时 . 不匹配换行。再查转义:字面量点号必须写成 \.,+、?、(、[、{ 等特殊字符要按字面匹配时都需要反斜杠。还不行就缩成最小用例,再逐步加回复杂度。

替换模式如何工作?

在替换模式下,你提供使用特殊语法引用捕获组的替换字符串: • `$&` 或 `$0`:整个匹配 • `$1`、`$2`、`$3`:编号捕获组(从1开始) • `$<name>`:命名捕获组(ES2018+) • `` $` ``:匹配之前的所有内容 • `$'`:匹配之后的所有内容 • `$$`:字面美元符号 例如,模式 `(\w+)@(\w+)` 配合替换字符串 `$2@$1` 会交换每个 @ 符号两侧的部分。在部署到生产环境前在此测试复杂替换。

能测试正则性能或检测灾难性回溯吗?

工具显示每次匹配操作的耗时。如果发现某些输入出现极端延迟(秒级而非毫秒级),可能遇到了灾难性回溯:正则引擎在失败前探索指数级可能性的情况。常见触发因素:嵌套量词如 `(a+)+`、重叠分支、可选组上的量词。诊断方法:简化模式、使用原子组或占有量词(如果可用)、重构以避免歧义分支。实时反馈帮助在生产环境遇到问题前发现性能问题。

贪婪量词和懒惰量词有什么区别?

贪婪量词(*、+、{n,})尽可能多地匹配。懒惰量词(*?、+?、{n,}?)尽可能少地匹配。例如 'abc123':/\w+\d+/ 匹配 'abc123'(贪婪,吃掉所有);而 /\w+?\d+/ 匹配 'abc1'(懒惰,在 \d+ 前取最少)。使用懒惰量词避免匹配过多内容。

如何用正则匹配包括表情符号在内的 Unicode 字符?

使用 'u'(Unicode)标志和 Unicode 属性转义。例如:\p{Emoji} 匹配任何表情符号,\p{Script=Han} 匹配汉字,\p{L} 匹配任何 Unicode 字母。没有 'u' 标志时,\d 和 \w 只匹配 ASCII 字符。启用 'u' 标志后它们匹配完整的 Unicode。

这个工具和 Regex101 有什么区别?

Regex101 的强项是引擎广度:可以并排测试 PCRE、Python、Go、Java、.NET 等方言,还带解释面板和社区示例库。本工具只跑 JavaScript 引擎(结果与你的生产 JS 代码完全一致),完全离线运行、零上传(粘贴密码或 PII 不用提心吊胆),而且替换模式、常用模式库、灾难性回溯耗时检测都是内置的。需要多引擎对比选 Regex101;写 JavaScript 且在意隐私选本工具。