.任意字符(除换行,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+)+)在特定输入下可能导致灾难性回溯,造成程序卡死。生产环境中建议对正则输入长度设限,并使用超时机制。本工具作为纯前端离线工具,所有计算在浏览器本地完成,不会将数据上传到服务器,可放心处理敏感文本。
正则表达式(Regular Expression,简称 Regex)是一种描述字符串模式的微型语言。它用一个简洁的字符串来匹配、查找、替换符合特定规则的文本,广泛应用于表单验证(邮箱、手机号)、数据清洗、日志分析、URL 路由、代码搜索替换等场景。
g 全局匹配(找出所有匹配而非第一个);i 忽略大小写;m 多行模式(使 ^ 和 $ 匹配每行首尾);s dotAll(让 . 匹配换行符);u Unicode 模式(正确处理 Unicode,支持 \p{...});y 粘性匹配(从 lastIndex 处必须连续匹配)。多个标志可组合,如 gi。
常见原因:1) 括号未成对闭合,如 (abc 缺少 );2) 量词位置错误,如 *+ 放在开头;3) 反斜杠转义错误;4) 使用了后行断言 (?<=) 但浏览器过旧;5) u 标志下模式不合法。本工具会在错误提示中显示具体原因,可据此修正。
默认量词是贪婪的,会尽可能多地匹配。如 <.*> 匹配 <a><b> 时会匹配整段。在量词后加 ? 变为非贪婪,如 <.*?> 只匹配 <a>。支持 *?、+?、??、{n,m}?。
不会。本工具是纯前端实现,零依赖、零网络请求。所有正则匹配、高亮、替换都在你的浏览器本地完成,文本内容绝不会离开你的设备,断网也能正常使用,适合处理敏感数据。
替换字符串中可用特殊变量:$1~$9 引用捕获分组;$& 引用整个匹配;$` 匹配前文本;$' 匹配后文本;$$ 字面量 $。例如正则 (\d{4})-(\d{2})-(\d{2}) 替换为 $3/$2/$1 可把 2024-01-15 变成 15/01/2024。命名分组还可用 $<name> 引用。