tigtools

正则表达式测试器

输入模式和文本,即可查看所有高亮显示的匹配项及其位置和捕获组。使用浏览器的 JavaScript 正则表达式引擎。

在浏览器中运行 无需注册

标志

使用 $1、$2 … 表示编号分组,$<name> 表示命名分组,$& 表示整个匹配项,$$ 表示美元符号。

使用方法

  1. 在“模式”字段中输入正则表达式,不要输入两侧的斜杠。
  2. 勾选所需的标志。g(全局)可查找所有匹配项,而不只是第一个。
  3. 粘贴要搜索的文本。匹配项会高亮显示,并逐项列出其索引和捕获组。
  4. 可选:输入替换内容,例如 $2-$1,预览 String.replace 的结果。

工作原理

此测试器使用浏览器内置的 RegExp 对象运行你的模式,因此结果与该浏览器中的 JavaScript(ECMAScript)代码完全一致。其他语言使用不同的正则表达式风格:PCRE(PHP)、Python 的 re 模块、Java 和 .NET 支持 JavaScript 不支持的功能,例如占有量词(a++)、原子组((?>…))、(?i) 这样的内联修饰符和递归;它们在细节上也有所不同,例如 \A 和 \Z 锚点。在依赖某个模式之前,请先在目标语言中测试。所有当前浏览器都支持后行断言((?<=…))、命名组((?<name>…))和 Unicode 属性转义(带 u 标志的 \p{L})。

如果没有 g 或 y 标志,只会找到第一个匹配项,与 RegExp.exec 的行为相同。零长度匹配(例如 ^ 或 \b 的匹配)会列出,但不会高亮;匹配后,搜索会向前移动一个字符(带 u 标志时移动一个码点),与 String.matchAll 的行为相同。捕获组会按编号显示,并在已定义名称时同时显示名称;未参与匹配的组会标记为无值,这与空匹配不同。

某些模式(例如在没有匹配项的长行上使用 (a+)+$)可能需要指数级时间才能失败(灾难性回溯)。为降低风险,测试会在你停止输入片刻后开始,只搜索文本的前 100,000 个字符,最多收集 1,000 个匹配项。病态模式仍可能导致标签页暂时无响应;如果发生这种情况,请简化模式或缩短文本。

示例

提取日期

在“Due 2026-03-15, paid 2026-04-02”上使用带 g 标志的模式 (\d{4})-(\d{2})-(\d{2}),会找到两个匹配项。组 1 是年份;替换内容 $3.$2.$1 会将文本转换为“Due 15.03.2026, paid 02.04.2026”。

使用命名组,让代码更易读

在查询字符串 a=1&b=two 上使用 (?<key>\w+)=(?<value>[^&]*),会列出每个键值对中的 key 和 value,与 JavaScript 中 match.groups.key 和 match.groups.value 的返回值一致。

跨行进行不区分大小写的搜索

使用 g、i 和 m 标志的 ^error:.* 会匹配日志中每一行以 Error:、ERROR: 或 error: 开头的内容,因为 m 会让 ^ 匹配每一行的开头。

常见问题

我的正则表达式在 Python、PHP 或 Java 中也能以相同方式运行吗?

不一定。此工具使用 JavaScript 引擎。虽然基本语法相同,但占有量词、原子组、(?i) 这样的内联标志以及某些转义序列只存在于其他风格中,而且有些功能的行为也有所不同。请务必在目标语言中进行测试。

为什么只找到一个匹配项?

g(全局)标志未启用。未启用时,JavaScript 只会返回第一个匹配项。勾选 g 可查找所有匹配项。

需要在模式两侧输入斜杠吗?

不用。只输入模式,例如输入 \d+,而不是 /\d+/g,然后使用复选框选择标志。结果下方会显示 JavaScript 字面量形式,方便复制到代码中。

为什么使用我的模式后页面变慢了?

(a+)+ 或 (.*)* 这样的嵌套量词,在没有匹配项时可能迫使引擎尝试指数级数量的路径。请让模式更具体,例如将 .* 替换为 [^,]*,或使用锚点。测试器将文本限制为 100,000 个字符,以降低影响。

隐私

你的模式和文本仅由浏览器中的 JavaScript 引擎处理,不会上传、存储或纳入分析统计。