🔍 正则表达式测试工具

广告位 - 顶部 (728×90)

正则表达式

/
/gi
标志位:
完整正则:/(\d{4})-(\d{2})-(\d{2})/g

测试文本

匹配高亮

高亮结果将显示在这里...

匹配列表

无匹配

替换

广告位 - 中部 (728×90)

正则语法速查

字符类

.任意字符(除换行,s 标志下含换行)
[abc]字符集,匹配 a 或 b 或 c
[^abc]否定字符集,非 a/b/c
[a-z]范围,a 到 z
\d数字 [0-9]
\D非数字
\w单词字符 [A-Za-z0-9_]
\W非单词字符
\s空白符(空格/制表/换行)
\S非空白符

锚点

^字符串开头(m 下为行首)
$字符串结尾(m 下为行尾)
\b单词边界
\B非单词边界

量词

*0 次或多次
+1 次或多次
?0 次或 1 次
{n}恰好 n 次
{n,}至少 n 次
{n,m}n 到 m 次
*? +? ??非贪婪(懒惰)版本

分组与断言

(abc)捕获分组
(?:abc)非捕获分组
(?<name>abc)命名捕获分组
\1 \2反向引用第 n 组
(?=abc)正向先行断言
(?!abc)负向先行断言
(?<=abc)正向后行断言
(?<!abc)负向后行断言
a|b或,匹配 a 或 b
\转义特殊字符

替换中的特殊变量

$&整个匹配文本
$1 $2第 n 个捕获分组
$<name>命名捕获分组
$`匹配前的文本
$'匹配后的文本
$$字面量 $

常用正则表达式速查

用途正则说明

使用教程

使用正则表达式测试工具的流程非常直观。首先在「正则表达式」输入框中输入你的模式,在「测试文本」区域粘贴待匹配的文本。工具会实时高亮显示匹配结果,并在「匹配结果」面板中列出所有捕获组。如果结果不符合预期,可以调整正则或开启不同的标志位。

本工具支持完整的 JavaScript 正则语法,包括字符类(如 \d\w[a-z])、量词(*+?{n,m})、分组与捕获((...))、断言((?=...)(?<=...))等高级特性。在「替换文本」框中输入替换模板,点击「替换」即可预览替换效果,支持 $1$2 等反向引用。

右侧速查表提供了常用的正则模式,如邮箱、手机号、URL、IP 地址等,点击即可自动填充到正则输入框中。标志位可以通过复选框一键切换,g 表示全局匹配,i 表示忽略大小写,m 表示多行模式,s 表示 dotAll 模式,u 表示 Unicode 模式。

应用场景

正则表达式测试工具在日常开发和数据处理中有广泛应用。前端开发中,常用于表单验证,如校验邮箱格式、手机号规则、密码强度等;后端开发中,用于日志分析和数据清洗,从海量日志中提取关键信息。数据分析师可以用它从非结构化文本中抽取结构化数据,如从网页源码中提取链接、价格、日期等。

在代码重构场景中,正则批量替换能大幅提高工作效率。例如将旧版 API 的调用方式批量更新为新版本,或统一代码风格。本工具的实时高亮和分组查看功能,让复杂的正则调试变得简单直观,尤其适合需要频繁调整正则模式的场景。

扩展知识

正则表达式源于形式语言理论,由数学家 Stephen Cole Kleene 于 1950 年代提出。现代正则引擎分为 DFA(确定有限自动机)和 NFA(非确定有限自动机)两大类,JavaScript 的 RegExp 属于 NFA 引擎,支持回溯和捕获组,功能强大但可能在处理复杂模式时性能较低。

安全方面,需注意「ReDoS」(正则表达式拒绝服务攻击):某些具有大量回溯的正则模式(如 (a+)+)在特定输入下可能导致灾难性回溯,造成程序卡死。生产环境中建议对正则输入长度设限,并使用超时机制。本工具作为纯前端离线工具,所有计算在浏览器本地完成,不会将数据上传到服务器,可放心处理敏感文本。

常见问题 FAQ

正则表达式是什么?有什么用?

正则表达式(Regular Expression,简称 Regex)是一种描述字符串模式的微型语言。它用一个简洁的字符串来匹配、查找、替换符合特定规则的文本,广泛应用于表单验证(邮箱、手机号)、数据清洗、日志分析、URL 路由、代码搜索替换等场景。

g、i、m、s、u、y 这些标志位分别是什么意思?

g 全局匹配(找出所有匹配而非第一个);i 忽略大小写;m 多行模式(使 ^$ 匹配每行首尾);s dotAll(让 . 匹配换行符);u Unicode 模式(正确处理 Unicode,支持 \p{...});y 粘性匹配(从 lastIndex 处必须连续匹配)。多个标志可组合,如 gi

为什么我的正则报错 Invalid regular expression?

常见原因:1) 括号未成对闭合,如 (abc 缺少 );2) 量词位置错误,如 *+ 放在开头;3) 反斜杠转义错误;4) 使用了后行断言 (?<=) 但浏览器过旧;5) u 标志下模式不合法。本工具会在错误提示中显示具体原因,可据此修正。

贪婪与非贪婪(懒惰)匹配有什么区别?

默认量词是贪婪的,会尽可能多地匹配。如 <.*> 匹配 <a><b> 时会匹配整段。在量词后加 ? 变为非贪婪,如 <.*?> 只匹配 <a>。支持 *?+???{n,m}?

这个工具会把我的数据上传到服务器吗?

不会。本工具是纯前端实现,零依赖、零网络请求。所有正则匹配、高亮、替换都在你的浏览器本地完成,文本内容绝不会离开你的设备,断网也能正常使用,适合处理敏感数据。

如何在替换中使用捕获组($1、$2)?

替换字符串中可用特殊变量:$1$9 引用捕获分组;$& 引用整个匹配;$` 匹配前文本;$' 匹配后文本;$$ 字面量 $。例如正则 (\d{4})-(\d{2})-(\d{2}) 替换为 $3/$2/$1 可把 2024-01-15 变成 15/01/2024。命名分组还可用 $<name> 引用。

广告位 - 底部 (728×90)