正则表达式测试工具

输入一个模式和一段测试文本。每个匹配都会随输入高亮显示,列表则给出它的位置,以及各分组捕获的内容。您输入的任何内容都不会离开浏览器。

免费 在浏览器中运行 核对于2026年11月10日星期二

此工具在您的浏览器中运行。您输入的内容不会发送给我们。

使用方法

  1. 输入模式,不要带斜杠。示例可找出写成2026-11-10形式的日期。
  2. 勾选所需的标志。g 查找所有匹配,i 忽略大小写,m 和 s 改变换行的读取方式。
  3. 粘贴测试文本。匹配会立即高亮显示,文本下方的列表给出每个匹配的位置和分组。
  4. 在“替换为”中输入文字即可看到替换结果,然后按“复制”取用。

此处的匹配方式

页面使用浏览器内置的正则表达式引擎,即 JavaScript 所用的引擎。匹配按顺序从文本开头开始查找。所示位置是匹配前的字符数,从0开始计,并按 JavaScript 处理文本的方式以 UTF-16 单位计数。

搜索在浏览器的后台工作线程中运行,因此页面保持响应。搜索在找到10,000个匹配后停止,超过200,000个字符的文本不会被搜索。对于可能匹配空字符串的模式,例如 x*,每次空匹配之后都会前进一个字符,因此搜索总会结束。运行超过2秒的搜索会被停止;请参阅关于灾难性回溯的部分。

  • 不使用 g 标志时,只显示第一个匹配,与 String.match() 的做法相同。
  • u 标志把表情符号或基本平面之外的其他字符读作一个字符。
  • d 标志会在列表中加入每个分组的起止位置。

灾难性回溯与2秒限制

正则表达式引擎会依次尝试模式可能匹配的各种方式。对某些模式(主要是一个重复组内再套一个重复组,例如 (a+)+)而言,可能的方式数量增长极快:每多一个字符,工作量就可能翻倍。当文本几乎匹配、只在最末尾才失败时,这种情况最容易发生。

例如,模式 (a+)+$ 用于一段由许多字母 a 后接一个感叹号组成的文本时,无法匹配,因为 $ 需要文本的末尾。引擎在放弃之前,仍会尝试字母的每一种切分方式。字母约为26个时,典型计算机上的搜索就可能需要一秒或更久,每多一个字母都会慢得多。所需时间取决于您的设备。

本页面在后台工作线程中运行每次搜索,并在2秒后停止,同时显示提示信息。页面的其余部分仍可使用,因此您可以更改模式或文本后重试。

  • 不要让一个重复嵌套在针对相同字符的另一个重复之中:应写 (a+)$,而不是 (a+)+$。对同一文本,安全的模式会立即完成。
  • 写得具体一些:在分组中使用 [a-z] 或 \d+,而不要使用点号,这样匹配的各部分就不会以多种方式相互重叠。
  • 先在文本的一小段样本上测试模式,然后再用于全文。
  • 尽可能加上锚点:开头的 ^ 和结尾的 $ 可以避免引擎尝试每一个起始位置。

替换模式

替换文本遵循 JavaScript 中 String.replace() 的规则。美元符号开始一个代码,该代码会被替换为匹配的文本:

写法 替换为
$1、$2等 编号分组的文本
$& 整个匹配
$` 匹配之前的文本
$' 匹配之后的文本
$$ 一个美元符号
美元符号、小于号、分组名和大于号 命名分组的文本

与 PCRE 和 .NET 的差异

为 PCRE(PHP、许多 Linux 工具)或 .NET(C#、Visual Basic)编写的模式,在此通常也能运行,但有些功能只存在于其中一种引擎。下表列出最重要的几项。

功能 JavaScript(本页面) PCRE 与 .NET
原子组与占有量词 不支持 PCRE 与 .NET 支持原子组;PCRE 支持 a++ 之类的占有量词
锚点 \A、\Z 和 \z 不支持:请改用 ^ 和 $ 支持
以 (?P<…>) 书写的命名分组 不支持 PCRE 支持
模式内的内联选项,例如 (?i) 不支持:请改为设置标志 .NET 支持
用 \K 排除匹配中的文本 不支持 PCRE 支持
替换命名分组 美元符号、小于号、名称、大于号 .NET 使用美元符号、花括号、名称、花括号

计算示例:一段文本中的三个日期

示例模式有三个命名分组:四位数字的年份,两位的月份和两位的日期,之间用连字符分隔。文本中含有三个日期,它们分别在位置14、34和50处匹配,位置从第一个字母处的0开始计算。

替换文本为日、月、年三个分组名(即美元符号加上各自被小于号和大于号括起来的名称),三个日期会被改写为10.11.2026、03.12.2026和15.01.2027。替换结果为:Invoice dated 10.11.2026, paid on 03.12.2026. Due 15.01.2027.

常见问题

这个测试工具使用哪种正则表达式语法?

它使用浏览器内置的 JavaScript 引擎。用于搜索、校验和清理文本的大多数模式,在 JavaScript、PCRE 和 .NET 中的写法相同,但有少数功能不同,如差异一节所列。

为什么列表在10,000个匹配处停止?

匹配按顺序收集。列表过长会绘制缓慢,也难以阅读,因此当模式匹配得更多时,页面只显示前10,000个匹配,并说明搜索已经停止。

为什么超过200,000个字符的文本会被拒绝?

文本过长会使页面变慢,而模式在其上运行可能要花很长时间。请先在文本的一部分上测试模式,再用于其余部分,或把文本切成较小的段落。

为什么高亮会略过某些匹配?

不包含任何字符的匹配,例如 x* 在字母之间找到的空位置,没有可高亮的内容。它仍会保留在列表中并标明位置,因此您依然可以看到它在哪里。

测试工具会把我的文本发送到服务器吗?

不会。匹配在您的浏览器中进行,页面不会保存您输入的内容,也不会将其发送到任何地方。关闭页面即会清除。

无效模式的提示是什么意思?

该模式无法被读取为 JavaScript 正则表达式。提示来自引擎,原文为英文,它会指出问题所在,例如某个括号从未闭合。

能否在这里测试为 PCRE 或 .NET 编写的模式?

通常可以,前提是它只用了常见功能。若其中含有原子组、占有量词、\A 或 \z,或内联选项,请先把那部分改写为 JavaScript 写法;表格列出了这些功能。

为什么页面提示模式运行时间过长?

搜索在此文本上没有在2秒内完成,因此页面将其停止。这通常意味着模式中有一个重复嵌套在另一个重复之中,例如 (a+)+,而文本又几乎匹配。灾难性回溯一节给出了更安全的写法。

资料来源

数据和文字最近核对于2026年11月10日星期二。

我们使用必要的 Cookie 来运行网站。经您同意后,Google 还会使用广告 Cookie 展示个性化广告。如果您拒绝,仍会看到广告,但广告不会个性化。