正则表达式在线测试工具
实时高亮全部匹配片段,逐项展示数字捕获组与命名捕获组、位置,支持单条复制;支持 g/i/m/s/u/y 标志位切换,内置邮箱、URL、IPv4、手机号等常用模式速查;提供基于 $1/$2 与 $
常见问题
正则表达式的标志位 g/i/m/s/u/y 分别是什么意思?
g(global)全局匹配,找出全部匹配项而非仅第一个;i(ignoreCase)忽略大小写;
m(multiline)多行模式,使 ^ 与 $ 匹配每行的首尾而非整个字符串的首尾;
s(dotAll)使 . 能匹配换行符 \n;
u(unicode)Unicode 模式,正确处理中文与 Emoji 等多字节字符;
y(sticky)粘滞匹配,从 lastIndex 位置开始且必须紧贴该位置。
什么是捕获组?如何用 $1 / $2 引用?
用圆括号 (...) 包裹的子模式会形成捕获组,按左括号出现顺序编号为 $1、$2、$3……
例如 (\w+)@(\w+)\.(\w+) 匹配邮箱时,$1 是用户名、$2 是域名、$3 是顶级域。
在替换字符串中可用 $1、$2 引用对应捕获组,$$ 转义为字面 $。
非捕获组 (?:...) 不编号、不消耗 $N。
什么是命名捕获组?如何用 $<name> 引用?
ES2018 起支持命名捕获组 (?<name>...),给捕获组起一个有意义的名字,避免按数字编号时数错顺序。
例如 (?<user>[\w.+-]+)@(?<domain>[\w-]+)\.(?<tld>[\w.-]+) 匹配邮箱,
匹配列表会同时展示 $1/$2/$3 数字组与 user / domain / tld 命名组。
替换字符串中可用 $<user>、$<domain>、$<tld> 引用,
也可继续用 $1、$2 数字组引用(命名组同时占用数字编号)。
命名组的核心价值:可读性高、调整组顺序后无需重排替换串、长期维护更稳健。
为什么我的正则没有匹配任何结果?
常见原因:1) 忘记勾选 g 标志位导致只显示第一个匹配,本工具默认勾选;2) 正则模式中含特殊字符未转义,
如 .、*、+、?、()、[]、、
\、^、$、| 需用 \ 转义;
3) 输入的测试字符串与模式确实不匹配;4) 模式中含中文/Emoji 但未启用 u 标志位。
如何避免正则表达式性能问题(ReDoS)?
含嵌套量词(如 (a+)+)或重叠交替(如 (a|a)*)的正则可能在恶意输入下指数级耗时,称为 ReDoS 攻击。
本工具对输入长度(10000 字)与匹配数(5000 个)设上限保护浏览器。生产环境应:1) 避免嵌套量词;
2) 优先使用具体字符类(如 [a-z])而非 .;3) 用非捕获组 (?:...) 替代捕获组;
4) 对超时敏感场景使用专门的正则超时库。
替换模式中如何使用 $1 / $2 / $<name> 引用捕获组?
切换到「替换」Tab 后,在替换字符串输入框中可用三种引用方式:
$1、$2、$3 数字组;
$<name> 命名组(ES2018,需正则用 (?<name>...));
$$ 转义为字面 $。
例如模式 (\w+)@(\w+)\.(\w+) + 替换 [$1 at $2.$3] 可将 dev@example.com
替换为 [dev at example.com];用命名组写法 (?<user>\w+)@(?<domain>\w+)\.(?<tld>\w+)
+ 替换 [$<user> at $<domain>.$<tld>] 结果相同但可读性更高。
本工具的替换永远使用全局匹配,所有匹配项都会被替换(即使你没勾选 g 标志位也会自动加 g)。
匹配列表中的「复制」按钮复制什么内容?
匹配列表每条匹配右侧的「复制」按钮会复制该条匹配的完整信息:序号、匹配文本、位置区间 @起-止、
所有数字捕获组 $1=... $2=...、所有命名捕获组 name=...(如有),用 Tab 分隔便于粘贴到 Excel 或编辑器。
顶部「复制匹配」按钮则一次性复制全部匹配,每条一行。
数据会上传到服务器吗?
不会。本工具完全在浏览器内运行,所有正则编译、匹配、替换逻辑由 JavaScript 在你本地执行,输入内容不会发送到任何服务器。
支持哪些 JavaScript 正则特性?
支持所有标准 ECMAScript 正则特性:字符类、量词、锚点、分组(捕获组与非捕获组)、反向引用、零宽断言(
(?=...) 正向、(?!...) 负向)。命名捕获组 (?<name>...) 与
后行断言 (?<=...)、(?<!...) 在现代浏览器中可用。具体兼容性请参考
MDN RegExp 文档。