编辑器

等待输入或正则表达式执行…

操作

?
?
?

关于 在线正则表达式测试器

粘贴一些文本,编写正则表达式模式,切换标志,立即查看匹配结果。此正则表达式测试器使用与现代 JavaScript 运行时相同的 RegExp 引擎,因此您在此处所见即在前端代码、Node.js 脚本或服务器端验证中所得。当您的运行时支持时,支持命名捕获组、环视和 Unicode 模式。

为何使用此正则表达式测试器

  • 实时匹配,可选“实时”模式,边输入边重新运行
  • 结构化匹配列表,包含起始索引、结束索引、值和命名捕获组
  • 完整支持 JavaScript/ECMAScript RegExp 语法(与您的 JS 运行时引擎相同)
  • 标志控制:g、i、m、s、u、y – 安全组合与实验
  • 基础性能洞察,每次运行执行时间以毫秒计
  • 纯文本摘要输出,便于快速复制/粘贴到工单、文档或提交信息中
  • 极佳学习工具:无需运行完整项目或测试套件即可原型化模式
  • 日常任务理想选择:日志解析、验证、URL/ID 提取、快速数据清理
  • 结果列表软性限制,避免匹配大文本时界面冻结

🔧 如何使用正则表达式测试器 for regex-tester

1

1. 粘贴或输入测试文本

添加您要搜索的文本:日志、片段、CSV 片段、HTML、JSON 等任何纯文本内容。

2

2. 编写您的正则表达式模式

输入正则表达式**无需包围斜杠**。例如:基本电子邮件类模式使用 <code>\b\w+@\w+\.\w+</code>,或带命名分组的 <code>(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})</code>。

3

3. 设置标志(g、i、m、s、u、y)

切换标志如 <code>g</code>(全局)、<code>i</code>(不区分大小写)或 <code>m</code>(多行)。底层实现与 JavaScript 完全相同,构建 <code>new RegExp(pattern, flags)</code>。

4

4. 检查匹配项与分组

查看每个匹配项及其索引、可选结束索引和捕获组。命名分组以类 JSON 映射形式显示,便于复制到测试夹具、解析器或文档中。

5

5. 复制摘要

使用文本摘要作为快速报告:列出带索引和分组的匹配项,可直接粘贴到工单、代码审查评论或备忘单中。

正则表达式语法与引擎详情

字符类与基础

JavaScript RegExp 引擎支持的核心构建块。

模式含义示例
.除换行符外的任意字符(除非使用 <code>s</code> 标志)<code>a.c</code> → 匹配 <code>abc</code>
\d, \w, \s数字、单词字符、空白字符<code>\d+</code> → <code>123</code>
\D, \W, \S上述字符的否定版本<code>\S+</code> → 非空白字符序列
[abc]字符集合<code>[aeiou]</code> → 单个元音字母
[^abc]否定集合<code>[^0-9]</code> → 非数字字符
^, $输入(或带<code>m</code>标志时的行)开始与结束<code>^Hello</code>, <code>!$</code>

量词

重复前一个标记,支持贪婪和懒惰匹配行为。

模式含义示例
?0次或1次<code>colou?r</code> → 匹配 <code>color</code> 和 <code>colour</code>
*0次或多次<code>a*b</code> → <code>b</code>, <code>aaab</code>
+1次或多次<code>\d+</code> → <code>1</code>, <code>123</code>
{n}恰好n次<code>a{3}</code> → <code>aaa</code>
{n,}至少n次<code>\d{3,}</code> → <code>123</code>, <code>1234</code>
{n,m}n到m次之间<code>a{2,4}</code> → <code>aa</code>, <code>aaa</code>, <code>aaaa</code>

分组、环视与命名捕获

现代JavaScript引擎提供的更高级功能。

功能语法示例
捕获组(...)<code>(\d{3})-(\d{2})</code> → 区号 + 后缀
非捕获组(?:...)<code>(?:https?|ftp)://</code>
反向引用\1, \2, ...<code>(\w)\1</code> → <code>aa</code>, <code>bb</code>
前瞻(?=...), (?!...)<code>\w+(?=! )</code> → <code>! </code>前的单词
后顾*(?<=...), (?<!...)<code>(?<=#)\w+</code> → <code>#</code>后的文本(*在现代引擎中)
命名组(?<name>...)<code>(?<year>\d{4})</code> → 结果中的<code>groups.year</code>

标志(选项)

测试器的标志直接映射到 JavaScript RegExp 标志。

标志名称效果
g全局查找所有匹配项而非仅第一个
i忽略大小写不区分大小写的匹配
m多行<code>^</code> 和 <code>$</code> 匹配行边界
s点号全匹配<code>.</code> 也匹配换行符
uUnicode在现代引擎中启用 Unicode 模式和属性转义
y粘性仅在当前索引处匹配(与<code>lastIndex</code>配合使用)

性能与安全

底层的JavaScript引擎同步执行正则表达式。为保持用户界面响应,测试器限制了收集的匹配数量(例如全局模式下的前500次命中)。这有助于避免界面过载,但不能替代对复杂或关键模式进行的完整性能审核。

命令行正则表达式工具

一旦您的模式在此处生效,您可以在终端、脚本或CI作业中重用相同或类似的正则表达式:

Linux / macOS

使用grep搜索(扩展正则表达式)

grep -E 'pattern' file.txt

查找匹配给定模式的行

使用sed搜索并替换

sed -E 's/pattern/replacement/g' input.txt > output.txt

在文本文件中进行批量替换

Windows / PowerShell

PowerShell正则表达式搜索

Select-String -Pattern '\d{3}-\d{2}-\d{4}' -Path logs.txt

在日志文件中查找美式社会安全号码模式(示例)

PowerShell正则表达式替换

(Get-Content input.txt) -replace 'old', 'new' | Set-Content output.txt

基于正则表达式的简单替换

实用正则表达式应用

网页与前端开发

  • 在表单中验证电子邮件、用户名、别名或自定义ID
  • 从URL或路径中提取路由参数
  • 快速为客户端验证原型化模式
// 基础电子邮件验证
/^[\w.+-]+@[\w.-]+\.[A-Za-z]{2,}$/i.test(email);
// 路由参数:/post/123
const match = pathname.match(/^\/post\/(\d+)/);

日志、数据与后端

  • 从日志行中解析时间戳和级别
  • 规范化空白字符并清理混乱文本
  • 从非结构化内容中提取ID、电子邮件或引用
// 压缩重复空白字符
const normalized = text.replace(/\s+/g, ' ').trim();
// 简单日志行匹配器
const m = line.match(/\[(?<date>\d{4}-\d{2}-\d{2})] (?<level>INFO|ERROR): (?<msg>.*)/);

数据清理与快速脚本

  • 在解析前去除不需要的HTML标签或属性
  • 从长文本块中提取所有URL、电子邮件或ID
  • 准备数据集字段以便导入到其他系统

❓ Frequently Asked Questions

为什么我的正则表达式没有匹配到任何内容?

常见陷阱:1)特殊字符未转义(如.?+),2)期望多个匹配时忘记g标志,3)缺少锚点(^$)或单词边界(\b),4)使用了JavaScript引擎尚不支持的功能(如某些后顾断言)。尝试简化模式并逐步添加组件。

⏱️执行时间(毫秒)是什么意思?

每次运行都使用performance.now()计时。该值是对正则表达式在当前输入上执行所需时间的粗略单次测量。它有助于发现明显耗时的模式,但并非完整的基准测试,也不能保证生产环境性能。

🔍首次匹配模式和全局模式有什么区别?

没有g标志时,JavaScript仅返回**第一个**匹配(如果有)。使用g标志时,测试器通过input.matchAll()收集**所有**匹配(限制在安全最大值内),包括索引和捕获组。当您关心多个匹配项时请使用全局模式。

🌍是否支持Unicode和<code>\p{...}</code>转义?

是的,当您的JavaScript引擎支持时。启用u标志进入Unicode模式,可在现代浏览器和近期Node.js版本中使用\p{Letter}\p{Script=Greek}等功能。

⚠️能否检测到灾难性回溯?

测试器可通过执行时间提示缓慢模式,但无法完全防止灾难性回溯:底层引擎仍同步运行。请将此工具用作早期预警系统,然后在自己的代码库中仔细基准测试和审查复杂模式。

Pro Tips

Best Practice

分小块构建正则表达式。从简单的匹配开始,然后逐步添加锚点、分组和量词。

Best Practice

尽可能使用命名捕获组(<code>(?<name>...)</code>)。它们使匹配结果自文档化,在代码审查时更易阅读。

Best Practice

谨慎使用<code>.*</code>和嵌套量词。它们可能在大输入量时导致严重回溯。使模式更具体或使用<code>{n,m}</code>限制重复次数。

Best Practice

调试时,临时移除<code>g</code>标志并专注于第一个匹配以简化思维模型。

Additional Resources

Other Tools