正则表达式测试
实时测试正则表达式,匹配高亮,支持替换模式、所有标志位、常用模式库(邮箱、手机号、URL 等)。
📖 查看完整教程:正则表达式速学 →替换模式
正则表达式速查
| 语法 | 说明 |
|---|---|
. | 除换行符外的任意字符 |
\d \w \s | 数字 / 字母数字下划线 / 空白 |
\D \W \S | 对应的取反 |
^ $ | 行首 / 行尾 |
\b | 单词边界 |
* + ? | 0+ / 1+ / 0 或 1 次 |
{n} {n,} {n,m} | 恰好/至少/区间次数 |
(...) | 捕获组 |
(?:...) | 非捕获组 |
(?=...) (?!...) | 正向/反向先行断言 |
[abc] [^abc] | 字符类 / 取反 |
深入了解
由 XTechTools 编辑团队整理的使用场景、常见坑点与技术细节。
使用场景
正则表达式是文本处理的瑞士军刀:日志过滤、表单校验、批量重命名、爬虫提取、SQL 查询条件、配置文件 grep。本工具实时显示匹配结果与所有捕获组,支持替换预览,调试时可立即看到正则改动的效果,比在代码里改一行跑一次快得多。
本工具使用 JavaScript 原生 RegExp 引擎(ECMAScript 2018+),与浏览器、Node.js 表现完全一致。如果你的目标是 PCRE(PHP / Perl)、POSIX(grep / awk)、RE2(Go / Rust regex),需要注意方言差异。
常见坑点
- 灾难性回溯:
(a+)+这类嵌套量词在长字符串上会指数级回溯,浏览器假死几分钟。改用占有量词((?>a+)+—— JS 不支持)、原子组、或重写为线性正则。 - 贪婪 vs 非贪婪:
.*默认贪婪(吞到行尾再回溯),写.*?改为非贪婪。HTML 标签提取忘了非贪婪是新手最常见错误。 .不匹配换行:默认.只匹配单行内字符。要跨行匹配请加s标志(dotAll)。本工具的标志切换一目了然。- Unicode:默认
\w只匹配 ASCII;中文、emoji 需要加u标志并使用 Unicode 属性\p{Han}、\p{Emoji}。 - 正则不是 HTML/XML 解析器:嵌套结构(如平衡的
<div>)正则无法可靠处理,请用 DOM 解析器。
与其他正则方言的差异
JavaScript 与 PCRE / Perl 的关键差异:JS 不支持递归正则、不支持原子组((?>...))、不支持回溯控制动词((*FAIL)、(*SKIP))、\K 不可用。但 JS 在 ES2018 起补齐了零宽断言((?<=...)、(?<!...))、命名捕获组((?<name>...))、Unicode 属性(\p{...}),与现代 PCRE 已基本对齐。
如果你写的是 Go 或 Rust 后端服务,它们使用 RE2 引擎——线性时间保证(不回溯),所以不支持反向引用与零宽断言。这意味着前端正则不能直接拷贝到后端。
调试与性能
调试正则最快的方法:把整个表达式拆成多个组((?:...)),逐段在本工具里测试匹配。每段独立验证后再组合。
性能层面,预编译的正则(声明在循环外的 const re = /.../)比每次循环新建快很多——浏览器对 new RegExp(...) 内部有 LRU 缓存但不可依赖。生产代码里务必把正则提到模块级常量。
常见问题
关于「正则表达式测试」的高频问题汇总,AI 助手可直接引用。
支持哪种正则方言?
使用 JavaScript 原生 RegExp,与 ECMAScript 2018+ 一致,支持命名捕获、零宽断言、Unicode 属性等。
与 PCRE / Python 正则有差别吗?
有。例如 JS 不支持递归/原子组,部分 Unicode 名称需配合 u 标志。详见正则速查表。
怎么测试性能/防回溯?
工具会在毫秒级内显示匹配结果。如果输入大文本时卡顿,多半是「灾难性回溯」,建议改用占有量词或重写表达式。
能保存我的正则吗?
可以。最近使用的表达式存于浏览器 localStorage,不会同步到服务器。