Command Palette

Search for a command to run...

Regex 解释器:将正则表达式转换为普通英语

Regex 解释器:将正则表达式转换为普通英语

T
Toolz Team
|Aug 23, 2026|15 最小读数

正则表达式 合集的一部分

Zui花费我时间最多的正则表达式是我没有写的,四岁了,坐在验证层里,看起来像一只猫走过键盘:嵌套的组,一个前瞻,两个字符类,和一个 {2,} hiding at the end。一张支持票说拒绝有效输入,在我修复之前我必须理解它,这意味着一次一个令牌在模式上精神运行引擎。那是每个开发人员在一个陌生的正则表达式上缴纳的税款,而这正是税款 正则表达式解释器 on toolz。dev 是为了去除而构建的,本指南是关于读取正则表达式而不是解码它们,以及逐个令牌的分解如何将符号墙变成像普通代码一样可以复习的东西。

TL;博士: Regex解释器解析一个正则表达式,并用简单的英语描述每个部分,按照引擎读取它的顺序:锚,字符类,量词,组,环视和转义,所有标记和缩进的如此嵌套的结构都是可见的 正则表达式解释器 使用真正的 JavaScript 引擎验证模式,并在浏览器中完成整个故障,无需上传任何内容。

什么是正则解释器?

Regex解释器拿一个正则表达式,把它一次一个构造,翻译成一个你能读的描述。而不是盯着看 ^(?<user>[a-z0-9._%+-]+)@ head中重构它的含义,你得到一个有序列表:这是一个字符串起始锚,这是一个名为user的命名捕获组,这是一个匹配小写字母、数字、点、百分号、加号或连字符的字符类,而这个量词意味着一个或多个模式没有改变,但理解它的努力已经从你的头脑转移到工具上。

该值来自于正则表达式故意紧凑的事实。每个符号都带有含义,并且相同的意图可以用多种不同的方式书写,因此没有可靠的方法可以按照您浏览函数的方式浏览模式。单个杂散反斜杠将字面点更改为 &quot;任何字符,&quot;以及一个贪婪的量词,您想要一个懒惰的量词更改组捕获的文本。正确阅读正则表达式意味着模拟引擎,并且手动模拟引擎速度缓慢且容易出错。解释者会进行该模拟并向您展示结果。

Toolz。dev上流是短的,你粘贴没有它周围斜杠的模式,切换它使用的标志,分解立即出现。嵌套组缩进,因此模式的形状一目了然,每个标志都用上下文描述,这样你就明白它是如何改变整个匹配的,而不仅仅是语法。

解释器与正则表达式测试器有何不同?

2个工具回答不同的问题,知道你需要哪些可以节省时间,一个正则表达式测试仪针对示例文本运行一个模式,并显示它匹配的内容:突出显示的匹配、捕获组以及任何错误,它回答&quot;这个模式是否做到了我想要的这个输入。&quot;一个解释器描述模式是什么意思,而根本没有任何测试输入。它回答&quot;这个模式实际上在说什么。&quot;

Regex是未知而不是数据时,你触及解释器,审查一个添加验证模式的拉取请求,继承一个充满未记录表达式的代码库,或者试图理解你从论坛复制的答案,这些都是你有模式的情况,需要知道它做什么,然后才信任它,你触及 正则表达式测试仪 当你已经了解了模式并想根据真实的例子确认其行为时。在实践中,两者成对工作:解释一个模式来理解它,然后测试它来证明它。测试者和解释者坐在 toolz。dev 上,正是出于这个原因。

家里还有第三个值得命名的工具。 正则表达式构建器 从零开始的时候从组件和模板组装一个模式。构建、解释、测试:这三个涵盖了使用正则表达式工作的整个生命周期,从编写一个你还没有必须理解一个你没有编写。

故障实际上显示什么?

解释器从左到右行走模式,并按照引擎遇到它们的顺序发出一条标记线。该顺序很重要,因为正则表达式是按顺序读取的,并且按顺序查看令牌反映了匹配的实际进行方式。

大多数图案中锚都是第一位的。 ^$ symbols不匹配字符;它们断言一个位置,字符串的起始和结束,或者在设置多行标志时每行的起始和结束,解释者注意到这种双重行为,所以你永远不会惊讶于一个锚在下面的行为不同 m 旗。

字符类,用方括号书写,描述从集合中提取的单个字符,解释器将集合扩展为单词:范围如 a-z 成为&quot;范围a到z,&quot;速记像这样逃逸 \d 成 &quot;一位数字,&quot;而一个领先的看护变成 &quot;任何不是 &quot;所列集的字符。之类的密集类 [a-zA-Z0-9._%+-] 读作简单的列表而不是谜题。

Quantifiers 是细微的虫子生活的地方,所以它们有自己的台词。A * 是零或更多, + 是一个或多个, ? 是零或一,并且 {n,m} 是显式范围,至关重要的是,解释者会标记懒惰的量词,即用尾随写入的量词 ?+?*?之所以如此,是因为贪婪和懒惰之间的区别会改变,即文本模式在其他地方捕获而不改变单个可见字符。

组和环顾四周缩进以显示嵌套。捕获组、非捕获组、命名组和所有四种环顾四周类型都获得了对其所做的事情的描述,并且它们内部的孩子图案缩进了一级,因此结构读起来像嵌套的轮廓而不是平坦的符号。

以下是公共构造如何映射到解释者告诉您的内容:

构造 例子 解释者怎么说
^ 字符串起始(或带有 m 标志的行的起始)
角色类 [a-z] A到z范围的单个字符
速记 \d 一个数字,0 到 9
量词 {2,} 2次或多次重复
懒惰量词 +? 重复一次或多次,尽可能少
捕获组 (...) 捕获组的开始,保存以供重用
名称组 (?<id>...) 名称捕获组的开始&quot;id&quot;
前瞻 (?=...) 封闭的图案必须遵循,但不会被消耗
后参考 \1 匹配捕获的相同文本组 1

描述遵循 中使用的术语 MDN 正则表达式参考的,所以如果你想进一步阅读任何单个构造,分解中的单词就是要搜索的单词。

为什么味道很重要?

正则表达式不是一种语言;它们是一系列密切相关的语言。 JavaScript、PCRE(PHP 和许多工具使用)、Python&#39;s re module、java 和。NET 都共享核心语法,但它们在边上发散,而这些边是混淆滋生的地方。Regex 解释器描述了 JavaScript 正则表达式,即浏览器和 Node。js 使用的风格,因为这就是该工具验证的内容以及大多数 Web 开发人员实际运行的内容。

共享核心大而可靠。字符类、常用量词、交替 |、分组、锚和标准速记符 \d\w mean 相同的东西到处都是。如果你的模式只使用那些,无论你最终运行它的语言如何,解释都是准确的。分歧点在高级功能中:lookbehind 支持在 JavaScript 中到达较晚,与 PCRE 不同,命名组语法因口味而异,并且某些引擎支持 JavaScript 根本没有的递归或所有格量词。

实用规则很简单。将共享结构的解释视为权威,并根据目标语言的文档双重检查任何特定于风味的扩展。由于解释器首先使用真实的 JavaScript 引擎验证模式,因此 JavaScript 不支持的构造将作为错误而不是错误的解释浮出水面,这是更安全的故障。如果您按照我的方式跨堆栈工作,在 PHP 后端和 JavaScript 前端之间移动,明确说明风味可以保存错误类别,其中在一个地方工作的模式会默默地在另一个地方不当行为。

我如何用它读取真实的模式?

默认情况下取出工具加载的示例,电子邮件形状的模式: ^(?<user>[a-z0-9._%+-]+)@(?<domain>[a-z0-9.-]+\.[a-z]{2,})$ 用不区分大小写的标志。它本身就是一张嘴。通过解释器运行它,它分解成一个简短的、可读的轮廓。

^ 断言字符串的开头。第一个命名的组,用户,从一类小写字母,数字和地址本地部分通常允许的标点符号中捕获一个或多个字符。然后是一个字面意思 @.第二个命名的组,域,捕获一个或多个字母,数字,点或连字符,后面跟着一个字面上的点和两个或多个字母的运行,这是顶级域。最后 $ 断言字符串的末尾。 i flag 表示无论大小写,整个事物都匹配,因此仅小写的类仍然接受大写输入。

读那样,生图中看不到的两样东西跳出来,一是 {2,} on the top-level domain 表示模式接受任何两个或两个以上字母的 TLD,这对于现代域是正确的,但会拒绝一个用非拉丁字符编写的国际化 TLD 其次,锚意味着模式必须匹配整个字符串,因此它验证了整个地址,而不是在更大的文本中找到一个。这些正是确定验证正则表达式是否过于严格或过于宽松的细节类型,它们在细分中很明显,而在原文中很容易错过。

一旦你了解了一个模式,你常常想用它做点什么,如果它是一个查找并替换的模式,那么 正则表达式替换 tool运行有反向引用支持的替换,如果是提取模式,则该 电子邮件提取器 将这种电子邮件匹配的策划版本应用到批量文本中,解释器是阅读步骤;这些是表演步骤。

我什么时候才能真正使用这个?

Code review 是我打得最多的案例,队友在验证层或日志解析器中添加正则表达式,diff 显示一行符号,没有注释,粘贴到解释器中,将五分钟的凝视变成十秒的读取,抓住经典的review 错过:一个与任何字符匹配的未转义的点,一个捕获过多的贪婪量词,一个在应该相反时存在或缺席的锚点,我已经开始将分解粘贴到拉请求中作为注释,它免费记录下一个人模式。

Learning is the next 正则表达式是那些除非你每天使用它们,否则永远不会完全坚持的技能之一,几个月后回到它们总是意味着重新学习语法。与解释器一起阅读真实模式比重读教程更快地返回,因为你在上下文中看到构造,做真实的工作,而不是作为孤立的例子。随着时间的推移,描述变得不必要,因为你已经内化了它们,这就是重点。

Debugging 关闭循环 当一个模式匹配错了东西时,解释常常会在你还没达到测试输入之前就揭示为什么 一个在应该懒的时候贪婪的量词 一个包含你忘了的字符的字符类 一个缺少的锚 让模式匹配一个子字符串:所有这些在分解中都可见 我把解释器放在旁边 正则表达式测试仪 所以我可以在同一个坐姿中进行解释和测试,并且两者都生活在我在书中描述的更广泛的套件中 web开发人员工具包指南

是私有的,离线工作吗?

Yes to both,而且出于同样的原因。整个分解是在浏览器内部的JavaScript中计算的。该模式永远不会发送到服务器,不会记录任何内容,一旦页面加载,该工具就会一直工作,您的连接被禁用。您可以通过打开网络选项卡或离线并观看它继续运行来确认这一点。

这比具体的正则表达式看起来更重要。模式通常是为了匹配敏感格式而编写的:内部标识符、API 密钥形状、帐号布局或私有数据的结构。将其中一个粘贴到服务器端工具中意味着将数据格式的描述交给第三方。保留分析客户端意味着模式保留在您的机器上,这是 toolz。dev 上每个工具背后的隐私优先原则,我在其中更全面地写了这一点 数据隐私指南

常问问题

如何理解复杂的正则表达式?

Paste the pattern 进入解释器,并读取逐个令牌的分解,它按照引擎应用它的顺序用纯英文描述每个构造,嵌套组缩进,这样你就可以看到结构,这使得在心理上模拟引擎变成简单地读取一个标记列表,速度更快,而且容易出错的程度也少得多。

正则表达式解释器和正则表达式测试器有什么区别?

Regex 解释器描述模式的含义,无需任何测试输入,而 regex 测试器则针对示例文本运行模式并显示它匹配的内容。使用解释器来理解或记录一个不熟悉的模式,然后使用测试器来确认它对真实数据的行为符合预期。他们回答不同的问题,并且作为一对工作良好。

解释器描述了什么样的正则表达式?

JavaScript(ECMAScript)正则表达式进行描述,浏览器和Node。js使用的风味。大多数语法,包括字符类、量词、组和锚,都与PCRE、Python和Java共享,因此核心解释是准确的跨语言的风味特定功能,如lookbehind和named-group语法可以有所不同,因此可以针对您的目标语言验证这些功能。

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

+ 或 * 等贪婪量词在回溯之前尽可能多地匹配文本,而懒惰量词,相同的符号后跟?如 +?或 *?,尽可能少地匹配。解释者明确地标记懒惰量词,因为差异会改变模式捕获的文本,而不会改变其他地方的任何可见字符。

解释器可以处理前瞻和后视吗?

是的。正面和负面的审视,写成(?=...)和(?!...),正面和负面的审视,写成(?&lt;=...)和(?&lt;!...),每个都用它们所断言的内容标记,并且像其他组一样缩进。审视检查文本是否出现在未将其包含在匹配中的位置,描述明确了这一点。

为什么解释器说我的模式无效?

Gattern 在解释之前使用真实的 RegExp 引擎编译,因此会使用引擎报告不平衡的括号或括号、无效转义或未知标志&#39;s 精确的错误消息。修复报告的问题,最常见的是缺少关闭括号或括号,并且会出现故障。

粘贴与私有数据匹配的正则表达式是否安全?

是的。该模式完全在浏览器内的 JavaScript 中进行分析。它永远不会发送到服务器,也不会记录,并且一旦页面加载,该工具就会在您的连接被禁用的情况下工作。您可以安全地从私有代码库或与个人或专有格式匹配的代码库中解释模式。

这与正则表达式构建器有何不同?

Regex 构建器在您从头开始时帮助您从组件和模板构建一个新的模式,而解释器描述的是您已经拥有的模式。两者是互补的:使用 Regex 构建器构建模式,使用解释器理解现有的模式,并使用 Regex 测试器确认其中任何一个。


免费阅读您自己的模式 正则表达式解释器。它用简单的英语将一个正则表达式分解为 token by token,完全在您的浏览器中,没有任何上传内容。

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!