正则表达式测试器
写下正则表达式、切换标志位,输入的同时就能看到测试字符串中每一处匹配被高亮出来。每次匹配的捕获组会逐一列出,替换预览在旁边同步运行,因此你可以同时确认这个模式找到了什么、又会产出什么。引擎就是浏览器自带的 JavaScript RegExp,也就是说你在这里看到的,正是你的代码将要做的——包括 JavaScript 与 PCRE、Python 或 Go 有出入的那些地方。不会发送到任何地方:模式和测试数据都留在页面内,而当你调试的样本是真实数据时,这一点很重要。
—
标志
匹配项2 处匹配
Contact me at jane@example.com or john@test.io for details.
- #1 @14jane@example.com
- #2 @34john@test.io
替换预览
Contact me at [redacted] or [redacted] for details.
使用方法
- 输入正则表达式(不含分隔符)。
- 切换标志:g(全局)、i(忽略大小写)、m(多行)、s(dotall)、u(Unicode)。
- 输入或粘贴测试字符串——边输入边高亮。
- 提供替换字符串预览结果。
常见问题
- 采用哪种方言?
- JavaScript (ECMAScript) 正则。现代浏览器支持后行断言、命名组、Unicode 属性转义。
- 替换中如何引用捕获组?
- 使用 $1、$2,完整匹配用 $&,命名组用 $<名称>。
- 有匹配上限吗?
- 为保持 UI 流畅最多捕获 10000 次迭代,列表显示前 50 个。
- 数据会发送吗?
- 不会。模式和测试字符串只在浏览器运行,自动保存仅存于本地存储。
- 为什么我的模式会让页面卡死?
- 几乎可以肯定是灾难性回溯。嵌套量词的模式——比如 (a+)+b——会迫使引擎在承认「不匹配」之前,尝试以指数级数量的方式去切分输入。解决办法是让内层不再有歧义,通常是把贪婪的 .* 换成一个不可能与分隔符重叠的否定字符类。
- 全局标志 g 究竟改变了什么?
- 没有 g 时,匹配在第一个结果处停止。有了 g,搜索会贯穿整个字符串,这正是匹配列表能多于一条的原因。同时它也让正则表达式在真实代码中带上了状态,因为它会记住上次停在哪里。这正是循环中复用同一个模式时、看起来每隔一个就漏掉一个匹配的常见原因。
- 怎样跨多行匹配?
- 涉及两个不同的标志,而且很容易混淆。多行标志改变的是锚点的含义,让 ^ 和 $ 在每个换行处都能匹配,而不只是在字符串首尾。dotAll 改变的是点号匹配什么,让它也能覆盖换行符。如果模式在第一行末尾就停住了,你通常想要的是 dotAll。
相关主题指南
相关工具
Glob 模式测试器
在浏览器中针对 glob 模式(*、**、?、[...]、{a,b})测试文件路径。
开发 0 0
查找与替换
对一段文本进行查找与替换。可选正则,并支持 global、case-insensitive、multiline、dotAll 标志。实时显示匹配数。
文本 0 0
字符串转义转换器
为 10 种上下文一次性转义字符串 — JavaScript、JSON、HTML 实体、URL、SQL、正则、Bash(单/双引号)、C 字符串、Unicode \u 转义。按需复制。
开发 0 0
数学表达式求值
用常见数学函数求值算术表达式 — `sqrt`、`sin`、`log`、`pow`、`min/max`,常量 `pi`、`e`、`tau`。
日常 0 0
CSS 选择器测试器
在浏览器中针对你的 HTML 测试 CSS 选择器,精确查看匹配到哪些元素。
开发 0 0
Cron 表达式解释器
将 cron 表达式翻译成自然语言,并按字段拆解。
开发 0 0