免费转换器

正则表达式 测试器

在浏览器中即时测试和调试正则表达式。高亮匹配项、查看捕获组、使用替换模式——免费且私密。

//g
标志:

关于此工具

正则表达式是一种用于匹配文本模式的特定于领域的语言。自 1968 年以来,它们一直是计算的一部分,现在已内置到每种现代编程语言、文本编辑器和命令行搜索工具中。语法简洁但容易出错:微小的变化会产生细微不同的匹配行为,复杂的表达式很快就会变得不可读。在您编辑模式时实时显示匹配的测试程序是开发和验证正则表达式的最有效方法。

该测试器使用 JavaScript 正则表达式引擎在您的浏览器中运行(如果应用程序在浏览器中运行,则与您的应用程序使用的引擎相同)。模式和测试文本反应式更新:每次更改都会重新运行匹配。突出显示匹配组,列出捕获的组,并公开标志(不区分大小写、多行、全局)以进行测试。

正则表达式语法在引擎之间略有不同。 JavaScript 遵循 ECMAScript 规范; Python、PCRE(PHP 和许多其他语言使用)、Java 和 Go 都有自己的方言,这些方言具有重叠但不完全相同的功能。这里开发的模式使用 ECMAScript 语法;跨引擎可移植性需要检查每个目标的文档。

为什么使用正则表达式测试器

众所周知,正则表达式错误在部署后很难调试。看起来合理的模式可能比预期匹配更多或更少,在边缘情况下失败,或者在某些输入上出现灾难性的回溯。针对代表性输入以交互方式测试模式可以在代码审查和生产之前捕获问题。

模式也受益于文档。在应该匹配的输入和不应该匹配的输入旁边显示正则表达式可以使意图明确。未来的维护者(包括六个月后的你自己)更欣赏记录下来的测试用例,而不是聪明的俏皮话。

使用方法

输入模式,输入测试输入,查看实时突出显示的匹配项。

  1. 输入您的图案: 在模式字段中输入正则表达式模式。文字正则表达式(/pattern/flags)和仅模式形式都可以工作;可以通过标志输入来设置标志。
  2. 添加测试输入: 粘贴模式应匹配的示例文本(最好也粘贴不应匹配的文本)。测试人员根据输入运行模式并突出显示匹配项。
  3. 设置标志: 常用标志:g(全局,查找所有匹配项)、i(不区分大小写)、m(多行、^ 和 $ 匹配行开始/结束)、s(dotall、. 匹配换行符)、u(Unicode)。
  4. 检查结果: 每个匹配项都会在输入中突出显示。捕获组显示在带有组索引和值的列表中。测试器还显示匹配的计数以及模式中的任何编译错误。

常见用例

技术细节

JavaScript 正则表达式遵循 ECMAScript 规范。主要功能:字符类 ([abc]、[^abc])、量词 (*、+、?、{n,m})、交替 (|)、分组 ((...))、捕获和非捕获组、前向和后向(现代引擎)、反向引用、命名组、Unicode 属性转义(带有 u 标志)和标准转义序列集。

与 PCRE 和 Python 的重要区别:JavaScript 中最近才支持lookbehind(2018+);命名组使用 (?<name>...) 语法;一些 Unicode 转义需要 u 标志才能正常工作。应根据每个目标的文档检查用于跨语言使用的模式。

性能:基于回溯的正则表达式引擎(大多数包括 JavaScript)可能会对某些病态模式产生灾难性的回溯。使测试人员挂起的测试表明该模式需要简化 - 通常通过避免嵌套量词和不明确的交替来简化。

最佳实践

常见问题

该工具支持哪种正则表达式风格?
它使用 JavaScript 的内置 RegExp 引擎,该引擎支持标准语法,包括向前查找、向后查找(在现代浏览器中)、命名捕获组和 Unicode 属性转义。
我可以测试正则表达式替换吗?
是的。切换到替换模式以输入替换模式。您可以使用 $1、$2 等来捕获组反向引用,使用 $<name> 来表示命名组。
为什么我的正则表达式在这里的匹配与 Python/PHP 中的不同?
不同的编程语言的正则表达式引擎略有不同。 JavaScript 不支持所有格量​​词或某些 PCRE 特定的功能。不同语言的核心语法(字符类、量词、组)是相同的。
该工具是否保存我的正则表达式模式?
不会。不会保存或传输任何内容。该工具完全在您的浏览器中运行。您可以通过复制正则表达式字符串来添加书签或共享模式。
如何匹配字面特殊字符?
用反斜杠转义它。要匹配文字点:\.要匹配文字反斜杠:\\.在字符类[...]内,大多数特殊字符失去了它们的含义。
测试器是否在服务器上运行?
不会。模式编译和匹配是在浏览器中使用本机 RegExp 对象进行的。
我可以测试非 JavaScript 引擎的模式吗?
大多。对于简单的模式,主要引擎都同意。对于高级功能(lookbehind、原子组、所有格量词、Unicode 属性转义),请根据目标引擎的文档进行确认。
它可以处理非常大的输入吗?
最多几兆字节也能顺利工作。较大的输入可能会减慢或挂起浏览器,特别是对于容易回溯的模式。