正则表达式测试仪和可视化工具

免费的在线正则表达式测试器和可视化器。编写一个 JavaScript 正则表达式,然后将其绘制为交互式图表,用简单的英语进行解释,并与颜色编码的捕获组进行实时匹配。替换、提取、单元测试和导出代码,无需注册。

由 Shehzad Munir 构建和维护 ·

正则表达式测试仪和可视化工具
Loading Loading Regex Tester
  • 开发者工具
  • 自由的 · 无需注册
  • 在您的浏览器中运行
  • 14特点
Share

一个正则表达式测试器,向您展示您的模式的含义

在一处测试、调试和理解正则表达式。输入一个模式,它会立即绘制为交互式铁路图,并用简单的英语逐个符号进行解释,并针对您的文本实时运行,并以颜色突出显示每个匹配和捕获组。替换、提取、拆分、编写单元测试、导出 9 种语言的工作代码并获得有关灾难性回溯的警告,所有这些都在您的浏览器中完成。

大多数正则表达式测试器只告诉您模式是否匹配。这也向您展示了原因。当您键入时,正则表达式将被解析并绘制为铁路图:从左到右的地图,其中穿过该图的每条路径都是模式可以匹配的字符串。将鼠标悬停在任何方框上,图案中匹配的字符就会亮起,并且简单的英语描述会告诉您该作品的确切用途。将文本光标移动到图案中,图表就会跟随它。在下面,您的模式会根据您自己的测试文本实时运行,每个匹配项都会突出显示,并且每个捕获组都有自己的颜色,因此您可以同时查看匹配的内容和原因。

特征

  • 任何模式的交互式铁路图:将鼠标悬停在正则表达式中的框上以将其点亮
  • 每个标记、组、量词和环视的简单英语解释
  • 实时比赛突出显示,并在文本内使用颜色编码的捕获组
  • 单击匹配即可在图表上查看每个组捕获的内容
  • 跟随光标的语法颜色模式编辑器
  • 所有 JavaScript 标志:g、i、m、s、u、v(unicode 集)和 y
  • 替换为 $1、$<name>、$& 以及突出显示的前后预览
  • 使用模板、唯一/排序、CSV 和 JSON 导出将匹配项提取到列表
  • 通过正则表达式分割文本,以及必须(或不能)匹配的单元测试
  • JavaScript、TypeScript、Python、PHP、Java、C#、Go、Rust 和 Ruby 的代码导出
  • 兼容性表:查看 Python、PCRE、Go 或 Rust 中哪些功能被破坏
  • ReDoS 防护:在工作线程中运行,停止失控模式并标记嵌套量词
  • 包含 40 个测试模式的库以及示例生成器
  • 可点击的备忘单、已保存的模式和可共享的链接,100% 在您的浏览器中

如何使用正则表达式测试仪和可视化工具

  1. 1

    输入图案

    输入正则表达式(粘贴 /pattern/flags 会自动拆分它),从模式库中选择一个,或者从“构建”选项卡中的示例生成一个正则表达式。

  2. 2

    切换标志

    单击 g、i、m、s、u、v 或 y 更改匹配行为;将鼠标悬停在一个标志上以查看它的作用。

  3. 3

    阅读视觉图

    将鼠标悬停或单击铁路图中的任意框,或切换到“解释”,以查看模式的每个部分的含义。

  4. 4

    根据您的文本进行测试

    将文本粘贴到测试字符串中;比赛和捕捉组精彩直播。单击匹配即可在图表上查看每个组的值。

  5. 5

    替换、提取或测试

    使用替换、提取、拆分和单元测试来检查模式是否完全符合您的需要。

  6. 6

    导出或共享

    从“代码”选项卡复制您语言的工作代码,下载 SVG/PNG 格式的图表,或复制共享链接。

常见用例

  • 了解您继承的复杂正则表达式,一次一个图表框
  • 调试正则表达式与您的数据不匹配的原因
  • 发货前验证电子邮件、URL、电话或密码模式
  • 使用命名捕获组从日志行中提取字段
  • 使用组引用制作和预览查找和替换
  • 将 JavaScript 正则表达式移植到 Python、PHP、Go 或 Java
  • 检查灾难性回溯 (ReDoS) 模式
  • 通过视觉解释教授或学习正则表达式

详细指南

如何阅读正则表达式铁路图

铁路(语法)图的读法就像火车轨道一样:从左侧的点开始,沿着任意路线到达终点,并且您传递的字符形成正则表达式接受的字符串。分支意味着替代,在下面循环的轨道意味着重复,而绕过上面的框的轨道意味着该部分是可选的。彩色框架是捕获组(在突出显示的匹配中使用相同的颜色),虚线框架是在不消耗文本的情况下进行检查的环视,药丸形状的框是匹配位置而不是字符的锚点。单击结果中的匹配项,每个组框架都会显示其捕获的确切值,如果跳过该组,则显示“不匹配”。

图中正则表达式语法意义
带引号文本的框abc\. \n这些确切的字符
框中列出“其中之一:”[a-z0-9_]集合中的任何单个字符
框列出“无:”[^\s@]不在集合中的任何单个字符
绿框(数字、文字字符……)\d \w \s .字符类简写
药丸形盒^ $ \b锚点:一个位置,而不是一个角色
轨道分裂成分支猫|狗任一种选择
轨道环回下方+ * {2,5}重复(标签显示次数)
上面的轨道旁路? * {0,3}该部分是可选的
虚线环+? *?懒惰:尽可能少地重复
彩色框“#1 名称”(...) (?<名称>...)捕获组,从左到右编号
虚线框“后接:”(?=…) (?!…) (?<=…)前瞻/后瞻

正则表达式备忘单:您每天都会使用的语法

打开测试器上方的内置备忘单,然后单击任何标记将其插入到光标处。这些是几乎所有模式的构建块:

代币火柴例子
\d数字0-9\d{4} 匹配 2026
\w字母、数字或下划线\w+ 匹配 user_42
\s空白(空格、制表符、换行符)a\sb 匹配 'a b'
.除换行符之外的任何字符a.c 匹配 abc, a-c
[abc] / [^abc]列出的字符之一/没有一个[aeiou] 匹配元音
^ 和 $字符串的开头和结尾(或带有 m 的行)^\d+$ 仅为数字
\b一个字边界\bcat\b 跳过“连接”
* + ?0+、1+ 或 0-1 次重复颜色?r 匹配颜色,颜色
{n,m}n 到 m 次重复之间\d{2,4}
(...) 和 (?<名称>...)捕获组/命名组(?<年份>\d{4})
(?:…)分组而不捕获(?:ab)+
\1, \k<名称>与先前组相同的文本(\w)\1 匹配 'll'
(?=…) (?!…)跟随/不跟随\d+(?=px)
(?<=…) (?<!…)之前/不之前(?<=\$)\d+

正则表达式标志解释

标志改变整个模式的行为方式。一键切换它们;将鼠标悬停在一个标志上以查看它的作用。

旗帜姓名影响
g全球的找到每一个匹配项,而不是停在第一个匹配项
i忽略大小写字母匹配大写或小写
m多行^ 和 $ 匹配每行的开头/结尾
s点全。也匹配换行符
u统一码将表情符号和星体字符视为一个字符;启用 \p{…}
v统一码集你所做的一切,加上设置操作,如 [\p{L}--[a-z]]
y黏每场比赛必须准确地从上一场比赛结束的地方开始

在一处进行替换、提取、拆分和单元测试

切换到 Replace 以使用 $1、$<name>、$& 和 $$ 标记构建查找和替换规则;结果会突出显示每个插入的片段,以便您可以在对实际数据运行之前进行检查。 Extract 使用模板将每个匹配项转换为列表(例如 $2、$1 交换两组),并具有唯一和排序选项以及用于电子表格的 CSV 或 JSON 导出。 Split 准确显示了 String.split() 返回的内容,包括捕获的分隔符。单元测试可让您确定行为:添加必须匹配、必须完全匹配或必须不匹配的字符串,并且通过/失败计数会在每次击键时更新,因此对模式的微小更改永远不会悄悄破坏您已经修复的情况。

从文本中提取每个电子邮件地址并排比较文本的两个版本对 URL 查询字符串进行编码或解码

灾难性回溯 (ReDoS) 以及该测试仪如何保护您

某些模式,例如 (a+)+$ 或 (\w+\s?)*$,可以以指数级多种方式在其重复之间进行分割。当输入几乎匹配时,引擎会尝试每种组合,并可能冻结浏览器选项卡或关闭服务器,这是一种称为 ReDoS(正则表达式拒绝服务)的漏洞。该测试器在一个单独的 Web Worker 中运行每个模式,限制为两秒:如果引擎卡住,它就会停止,您会得到一个明确的警告,而不是冻结的页面。内置的 linter 还会在发布之前标记有风险的形状(一个重复的组,其内部也重复),以及其他常见错误,例如域名中的未转义点、[A-z] 范围和空替代项。

在 Python、PHP、Java、C#、Go、Rust 和 Ruby 中使用相同的正则表达式

测试器运行浏览器自己的 JavaScript (ECMAScript) 正则表达式引擎,因此 JavaScript、TypeScript 和 Node.js 的结果是准确的。 “代码”选项卡将您的模式转换为其他八种语言的可直接粘贴代码,并转换不同的部分:对于 Python,命名组变为 (?P<name>…),对于 C#,标志变为 RegexOptions,对于 Go 和 Rust,则变为内联 (?i),并且为每种语言重写替换标记。兼容性表列出了您的模式使用的每个功能以及每个引擎是否支持它:

特征JavaScriptPython重新聚合酶链式反应/PHPJava/.NET去/生锈
前瞻 (?= )是的是的是的是的No
向后查找 (?<= )任意长度固定长度固定/有界有界/任意No
反向引用 \1是的是的是的是的No
命名组(?<n>…)(?P<n>…)(?<n>…)(?<n>…)(?P<n>…) / (?<n>…)
Unicode \p{L}带着你的旗帜否(正则表达式模块)是的是/部分部分/是
\d 匹配非 ASCII 数字No是的No否/是否/是

从 JSON 生成 TypeScript 类型构建并解释 cron 表达式

从测试模式开始或从示例生成模式

该模式库包含 40 个现成的、经过测试的表达式,每个表达式都带有示例文本:电子邮件、URL、IPv4 和 IPv6、E.164 和美国电话号码、强密码、UUID、语义版本、英国邮政编码、ISO 和 DD/MM/YYYY 日期、价格、主题标签、@mentions、Markdown 链接、HTML 标签、Apache/Nginx 日志行、重复单词等。如果您想从数据开始,请将一些示例粘贴到“构建”中:生成器将字母、数字和符号分组为您可以优化的模式,例如 ^\d{4}-\d{2}-\d{2}$。 Build 还可以转义任何文字文本,因此像 . *? ( ) $ 完全匹配。

私人设计

一切都在浏览器的 JavaScript 引擎中本地运行:您输入的任何内容都不会上传、记录或存储在服务器上。您的最后一个会话保存在此浏览器中,以便您可以从上次中断的位置继续,保存的模式保留在您的设备上,并且共享链接在 URL 本身内携带模式、文本和测试,因此我们这边不会存储任何内容。

常见问题

该测试仪使用什么正则表达式风格?

它使用浏览器自己的 JavaScript (ECMAScript) 正则表达式引擎,与 Chrome、Firefox、Safari 和 Node.js 使用的引擎相同,包括标志 g、i、m、s、u、v 和 y。 JavaScript 和 TypeScript 的结果是准确的;代码选项卡将模式转换为其他语言。

我可以测试捕获组吗?

是的。每个匹配项都会列出其位置以及每个编号和命名组的值,组在文本中以颜色突出显示,单击匹配项会在图表上显示每个组捕获的值。

替换预览如何工作?

使用 $1 输入替换,$2 表示编号组,$<name> 表示命名组,$& 表示整个匹配,$$ 表示文字美元符号。结果会实时更新并突出显示每个插入的片段,与 String.replace() 生成的结果完全相同。

我的测试数据是私人的吗?

是的。正则表达式完全在您的浏览器中的本地 Web Worker 中运行。您的模式和测试字符串永远不会上传;保存的模式仅保留在此浏览器中。

如何针对我的文本测试正则表达式?

输入您的图案并粘贴示例文本;匹配项会实时突出显示,并显示捕获组,因此您可以准确地看到正则表达式匹配的内容并立即对其进行优化。

为什么我的正则表达式不匹配任何内容?

常见原因是缺少标志(i 表示大小写,m so ^ 和 $ 每行工作,s so . 跨越换行符)、未转义的特殊字符或来自其他语言的语法。将鼠标悬停在图表上以查看每个部分的期望,阅读简单的英语解释,并检查模式下的警告。

我可以为 JavaScript 和其他风格测试相同的模式吗?

匹配在 JavaScript 引擎上运行,代码选项卡生成 Python、PHP、Java、C#、Go、Rust 和 Ruby 的工作代码,转换命名组、标志和替换语法。兼容性表显示每个引擎不支持哪些功能,例如向后查找或反向引用。

什么是正则表达式可视化工具或铁路图?

正则表达式可视化工具将正则表达式绘制为铁路图:从左到右遵循的轨道,其中分支是替代项,循环是重复项,旁路是可选部分。它使长模式比原始语法更容易阅读。这里的图表是交互式的:将鼠标悬停在一个框上以在模式中突出显示它,并查看简单的英语解释。

我可以下载正则表达式图吗?

是的。使用图表上方的 SVG 或 PNG 按钮下载它作为文档、代码审查或教材。缩放和适合宽度控件有助于处理长图案。

什么是灾难性回溯 (ReDoS)?

当像 (a+)+$ 这样的模式可以以指数级多种方式在嵌套重复之间分割相同的文本时,就会发生这种情况,因此险些错过的输入会使引擎运行几秒钟或几小时。该测试器在 Web Worker 中运行模式,两秒后停止它们,并在部署嵌套量词之前发出有关嵌套量词的警告。

如何将 JavaScript 正则表达式转换为 Python?

打开“代码”选项卡并选择“Python”。该工具将 (?<name>...) 重写为 (?P<name>...),将 \k<name> 重写为 (?P=name),将 i、m 和 s 标志映射到 re.IGNORECASE、re.MULTILINE 和 re.DOTALL,并将 $1 替换转换为 \g<1>。请注意,Python 的内置 re 模块不支持 \p{…} Unicode 属性。

正则表达式标志 g、i、m、s、u、v 和 y 的含义是什么?

g 查找所有匹配项,i 忽略大小写,m 使 ^ 和 $ 在每一行上工作,s 让 。匹配换行符,u 启用完整的 Unicode 和 \p{…} 属性,v 添加 Unicode 设置操作,y(粘性)仅匹配上一次匹配结束的确切位置。

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

贪婪量词(*、+、{n,m})尽可能匹配,然后在需要时返回字符;懒惰的(*?,+?,{n,m}?)尽可能少地匹配,并且仅在需要时扩展。例如,<.+> 匹配一整行标签,而 <.+?> 一次匹配一个标签。在图中,惰性循环用虚线绘制。

前瞻和后瞻如何工作?

他们检查当前位置 (?=...) 之后或 (?<=...) 之前的内容,而不将其包含在匹配中;否定形式 (?!...) 和 (?<!...) 要求文本不存在。例如 \d+(?=px) 匹配 '12px' 中的 12。 JavaScript 支持任意长度的lookbehind。

这个工具可以为我生成正则表达式吗?

是的。将一些示例粘贴到“构建”选项卡中,它会通过概括字母、数字和符号来建议模式(例如 2026-09-24 变为 \d{4}-\d{2}-\d{2})。您还可以从库中的 40 个经过测试的模式开始,例如电子邮件、URL、IP 地址、电话号码、日期和密码规则。

如何为正则表达式编写单元测试?

打开“单元测试”选项卡并添加应匹配、应完全匹配或不应匹配的字符串。每个测试都会在每次击键时重新运行,并带有通过/失败计数,并且导入行将测试文本的每一行都转换为测试用例。

我可以与某人共享正则表达式吗?

单击共享链接复制重新打开确切模式、标志、测试文本、替换和单元测试的 URL。所有内容都在链接本身内部进行编码,因此服务器上不会存储任何内容。

这与 regex101 或 RegExr 有什么不同?

regex101 允许您在 PCRE、Python 和 Java 等多个引擎之间切换,而该工具则不能。该测试器专注于您的代码实际运行的 JavaScript 引擎,并添加了交互式铁路图、单元测试、ReDoS 保护、9 种语言的代码导出和兼容性表,无需帐户,也无需上传任何内容。

来自杂志

All articles →