使用方法
- 在“模式”字段中输入正则表达式,不要输入两侧的斜杠。
- 勾选所需的标志。g(全局)可查找所有匹配项,而不只是第一个。
- 粘贴要搜索的文本。匹配项会高亮显示,并逐项列出其索引和捕获组。
- 可选:输入替换内容,例如 $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 引擎处理,不会上传、存储或纳入分析统计。