Regex 测试器:匹配模式测试
Regex 测试器:通过实时匹配高亮、捕获组显示和所有 regex 标志支持来调试正则表达式。
什么是 Regex 测试器?
Regex 测试器是一款免费的浏览器端工具,用于编写、测试和调试正则表达式,提供实时反馈。它解决了 regex 开发的核心问题:在用实际文本测试之前,无法知道模式是否正确——而且在大多数环境中,编辑-运行-检查的循环既慢又零散。
输入一个模式,它会立即被评估。匹配项直接在测试字符串中高亮显示,捕获组被提取并标记,每个匹配的字符位置都会被报告,替换模式允许在将结果放入生产代码之前预览替代效果。所有六个 JavaScript regex 标志均受支持。提供按类别组织的 49 个预建模式库,用于常见验证需求。工具完全在浏览器中运行——您的模式和测试数据不会被发送到任何地方。
主要功能
- 输入时实时匹配: 使用 JavaScript 原生
RegExp引擎在每次按键时重新计算匹配项。结果面板无需按任何按钮即可更新。 - 所有 JavaScript regex 标志(g, i, m, s, u, y): 每个标志都是一个带标签的复选框:global、case-insensitive、multiline、dotAll、unicode 和 sticky。活动标志在模式输入字段旁边实时显示,反映 JavaScript 源代码中使用的
/模式/标志表示法。 - 测试字符串中的匹配高亮: 高亮匹配面板使用带有主色背景样式的
<mark>元素呈现您的测试字符串,包裹每个匹配项。未匹配的文本不带样式显示。面板显示实时匹配计数。 - 捕获组提取: 当有匹配项时,匹配详情面板出现。每个匹配条目显示完整的匹配文本、起始和结束字符位置,以及捕获组的标记列表(
$1、$2等)。没有内容的组标记为"空"。 - 匹配计数和位置: 详情面板中的每个匹配条目显示精确的
index和index + match.length,这与 JavaScriptRegExpExecArray的index属性直接对应。 - 带替换的替换模式: 可切换的替换部分接受替换字符串并显示完整的替代结果。支持反向引用(
$1、$2)。结果可以复制到剪贴板。 - 常用 regex 模式库: 包含 8 个类别 49 个模式的可搜索模式库:验证、日期和时间、数字、Web 和网络、文件和路径、代码、文本和标识符。点击"Use Pattern"将其加载到模式输入字段中。
如何使用 Regex 测试器
第 1 步:输入模式
在模式输入字段中输入您的正则表达式。字段两侧显示 / 分隔符,以直观指示 regex 格式。您输入的内容不包括斜杠——只需输入模式主体。
如果您的模式有语法错误(例如未关闭的组或无效的转义序列),模式输入字段下方会立即出现红色错误消息,显示来自 JavaScript RegExp 构造函数的确切错误文本。损坏的模式无法运行,但错误消息会精确指出问题所在。
第 2 步:设置标志
模式输入字段下方有六个标志复选框。默认情况下,g(全局)标志已启用。点击复选框切换标志:
g(全局):查找所有匹配项,而不仅仅是第一个i(不区分大小写):将大写和小写视为等价m(多行):使^和$匹配每行的开头和结尾,而不仅仅是整个字符串s(dotAll):使.除了匹配所有其他字符外,还匹配换行符u(unicode):启用完整的 Unicode 支持;使用\p{}Unicode 属性转义的模式需要此标志y(sticky):仅在字符串的当前位置(lastIndex)匹配,不向前搜索
活动标志字符串在模式字段旁边实时显示,因此如果同时选中 global 和 case-insensitive,将显示 gi。
第 3 步:输入测试字符串
在测试字符串面板中粘贴或输入您想要匹配的文本。测试字符串的字符数显示在面板标题中。文本区域接受多行输入,并可垂直调整大小。
第 4 步:读取匹配结果
右侧的高亮匹配面板即时更新。测试字符串中与您的模式匹配的每个部分都会高亮显示。面板标题显示总匹配数。
在两个主要面板下方,匹配详情部分出现,分别列出每个匹配项:
- 匹配编号(从 1 开始)
- 匹配的文本,显示在高亮代码块中
- 字符位置:起始索引和结束索引
- 捕获组,标记为
$1、$2等
第 5 步:使用替换模式(可选)
点击"Show Replace"按钮打开替换部分。在 Replace With 字段中输入替换字符串。反向引用有效:$1 插入第一个捕获组的内容,$2 插入第二个,依此类推。结果面板立即更新,显示完整的替代结果。点击复制图标复制结果。
第 6 步:使用模式库(可选)
点击"Pattern Library"按钮打开可搜索的模式面板。在搜索框中输入以按名称、描述或类别筛选。点击任意条目旁边的"Use Pattern"将其直接加载到模式字段中。选择后库自动关闭。
实用示例
示例 1:验证电子邮件地址
模式:^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$
标志:g
测试字符串:
user@example.com
invalid-email
another@test.co.uk
@missing-local.com
结果:两个匹配项——user@example.com 和 another@test.co.uk 被高亮显示。其他两行没有匹配项。
示例 2:从日志行提取捕获组
模式:(\d{4}-\d{2}-\d{2}) (\w+): (.+)
标志:gm
测试字符串:
2026-02-28 ERROR: Connection timeout after 30s
2026-02-27 INFO: Server started on port 3000
匹配 1 的详情:
- 完整匹配:
2026-02-28 ERROR: Connection timeout after 30s $1:2026-02-28$2:ERROR$3:Connection timeout after 30s
示例 3:使用捕获组反向引用替换
模式:(\w+)\s(\w+) 替换为:$2, $1 测试字符串:John Smith 结果:Smith, John
这演示了使用 $1 和 $2 交换两个捕获词组顺序的替换模式。
提示和最佳实践
启用全局标志进行全面测试。 关闭 g 时,匹配在找到第一个结果后停止。开发过程中通常需要启用 g,以查看测试字符串中所有潜在匹配项,并验证没有意外的额外匹配。
当模式使用 ^ 或 $ 时,使用 m(多行)标志。 没有 m,^ 只匹配整个输入字符串的开头,$ 只匹配结尾。有了 m,它们在每行的开头和结尾匹配,这几乎总是处理多行输入时想要的效果。
零长度匹配保护已内置。 当全局标志激活时,匹配循环会检查零长度匹配并递增 lastIndex 以防止无限循环。这意味着 a* 或 \b 等模式不会导致浏览器挂起。
以 /模式/标志 表示法复制模式。 Copy Pattern 按钮以 JavaScript 表示法将完整模式写入剪贴板,包括斜杠和活动标志——例如 /\d{4}-\d{2}-\d{2}/gm。您可以直接将其粘贴到 JavaScript 源代码中。
将模式保存到代码片段。 Save to Snippets 按钮(Copy Pattern 旁边可见)以 /模式/标志 格式将当前模式存储到通过 Glyph Widgets 赞助者功能提供的代码片段库中。这比仅依赖会话历史记录更持久。
常见问题和故障排除
模式显示红色错误消息。 错误文本直接来自 JavaScript RegExp 构造函数,描述了出了什么问题。常见错误包括 Invalid regular expression: missing )(未关闭的捕获组)和 Invalid escape(没有 u 标志时,反斜杠后跟不是有效转义序列的字符)。请逐字阅读错误消息——它指明了问题所在。
预期匹配项未高亮显示。 检查是否需要 i 标志进行不区分大小写的匹配,或者如果模式在多行输入中使用 ^ 或 $,是否需要 m 标志。还需验证模式没有过于严格地锚定——^\d+$ 只匹配仅包含数字的行,不匹配嵌入在其他文本中的数字。
捕获组显示"空"。 当捕获组参与匹配但子模式匹配了零个字符,或者可选组((...)?)没有参与时,捕获组为"空"。这与模式中根本没有该组不同。
替换结果不使用反向引用。 替换字符串中的反向引用使用 $1、$2、$n 语法。使用 \1 或 %1 不起作用——它们在 JavaScript 的 String.prototype.replace 中无效。命名组使用 $<名称> 语法。
模式从库中加载但不匹配。 某些库模式包含锚点(^ 和 $),设计用于整串验证,而不是在较大测试字符串中进行子字符串匹配。如果您在段落中搜索该模式,请删除锚点或添加不带 m 的 g,以查看核心模式是否匹配。
隐私和安全
Regex 测试器中的所有正则表达式评估都使用 JavaScript 原生 RegExp 引擎在您的浏览器中运行。没有任何模式、测试字符串或匹配结果会传输到任何服务器。可共享 URL 功能将您的模式和测试字符串编码到 URL 本身(仅限客户端),因此共享链接不涉及服务器往返。工具在首次页面加载后可离线工作。
常见问题解答
Regex 测试器是免费的吗? 是的,完全免费,无需账户、无需注册、无使用限制。
我的数据安全吗? 您的模式和测试字符串永远不会离开您的浏览器。所有匹配都使用 JavaScript 内置的 RegExp 在本地运行。工具没有参与匹配过程的服务器端组件。
我可以离线使用吗? 是的。页面加载后,整个工具无需网络连接即可工作。模式库、匹配引擎和替换模式都在本地运行。
它使用哪种 regex 方言? 工具使用 JavaScript 原生 RegExp 引擎,实现 ECMAScript 正则表达式规范。支持大多数常见 regex 语法,包括前向断言、后向断言(现代 JS 中)、捕获组、非捕获组、反向引用和 Unicode 属性转义(使用 u 标志)。
支持前向断言和后向断言吗? 是的。正向前向断言 (?=...)、负向前向断言 (?!...)、正向后向断言 (?<=...) 和负向后向断言 (?<!...) 都受此处使用的 JavaScript 引擎支持,因为它们是 ECMAScript 2018 规范的一部分,受所有现代浏览器支持。
我可以与他人共享我的模式吗? 可以。工具使用可共享状态,将您的模式、测试字符串和标志编码到 URL 中。从浏览器地址栏复制 URL 并共享。当接收者打开链接时,一条提示通知会告知他们状态是从共享 URL 加载的。
模式库中有多少个模式? 库包含 8 个类别中的 49 个模式:验证(10 个模式,包括电子邮件、URL、电话、UUID、密码)、日期和时间(5 个)、数字(5 个)、Web 和网络(6 个)、文件和路径(5 个)、代码(6 个)、文本(7 个)和标识符(5 个,包括信用卡、SSN、IBAN、ISBN-13 和 IMEI)。
s(dotAll)和 m(多行)标志有什么区别? 它们影响不同的内容。s 标志使 . 除了匹配所有其他字符外,还匹配换行符。没有它,. 会跳过换行符。m 标志使 ^ 和 $ 匹配每行的开头和结尾,而不是整个字符串。它们相互独立——您可以启用任意一个、两者都启用或都不启用。
我可以使用像 \p{Letter} 这样的 Unicode 属性转义吗? 是的,但必须启用 u 标志。启用 u 后,现代浏览器支持 \p{Lu}(大写字母)和 \p{Script=Latin} 等模式。没有 u,\p 序列被视为字面量 p。
如何跨多行匹配? 启用 s(dotAll)标志使 . 匹配换行符,然后使用 [\s\S]*? 或在 s 激活时使用 .+。如果需要 ^ 和 $ 锚定到行的开头和结尾,也要启用 m。
相关工具
- JSON Formatter — 将 JSON 格式化以用作 regex 测试字符串
- Base64 Encoder/Decoder — 对需要进行 regex 匹配的文本进行编码/解码
- Diff Checker — 并排比较原始文本和替换后的文本
立即试用 Regex 测试器:Regex 测试器