UFOZoo

正则表达式测试 — JS/PCRE实时匹配与捕获组调试工具

在线正则测试器,实时匹配高亮与捕获组可视化表格。支持 g/i/m/s/u 标志切换、替换测试和常用正则库。浏览器本地运行。

功能特性

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

使用方法

  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 代码完全一致。

正则标志是什么意思?

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

捕获组是如何工作的?

捕获组是用括号(...)括起来的正则部分,用于提取每个匹配的特定片段。例如 `(\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 项目的准确性。

我的测试数据会被发送到服务器吗?

不会。所有正则匹配、高亮和处理完全在浏览器中使用 JavaScript 内置的 RegExp 对象完成。你的模式、测试字符串和匹配结果永远不会离开设备——没有后端服务器、没有 API 调用、没有数据收集。页面加载后甚至可以断网继续完美运行。这使得用它测试密码、API 密钥、个人信息或机密日志等敏感数据是安全的。

替换模式如何工作?

在替换模式下,你提供使用特殊语法引用捕获组的替换字符串: • `$&` 或 `$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。

相关工具