跳到主要内容
TOOL / 开发 · 文本

正则表达式工作台

把抽象的正则表达式变成看得见的东西:输入模式,实时看到高亮位置、每条命中的内容,以及各个捕获组分别取到了什么。

核心能力​

  • 实时高亮:测试文本里所有命中位置即时标出,改一个字符立刻重算
  • 捕获组拆解:逐条列出命中内容、起止位置,以及每个数字组 $1 $2 和命名组 <year> 分别捕获到的值;未参与匹配的组会明确标为「未参与」而不是留空
  • 替换预览:填入替换模板后预览替换后的完整结果,变化处以绿色标出,可一键复制
  • 分享链接:pattern 与 flags 会编码进 URL hash,复制链接发给同事,对方打开就是同一条正则
  • 13 条常用片段:分「网络 / 中文常用 / 文本清洗」三组,点击直接填入

标志位​

标志含义
g全局,查找所有匹配
i忽略大小写
m多行,^ 和 $ 匹配每一行的行首行尾
s跨行,. 也能匹配换行符
uUnicode,按码点处理,emoji 与 \u{...} 才正确
y粘性,只从 lastIndex 所在位置开始匹配

替换模板语法​

写法含义
$1 … $99第 N 个捕获组
$<name>名为 name 的命名捕获组
$&整个匹配
$$字面量 $
$0不是合法引用,原样保留

未参与匹配的组展开为空字符串;$ 后面紧跟非数字、非 <、非 & 的字符时,该 $ 按字面量处理。

常用片段​

分组片段
网络邮箱、URL、IPv4
中文常用手机号、身份证、日期、中文字符
文本清洗去 HTML 标签、重复词、空白行、Markdown 标题、十六进制颜色

「去 HTML 标签」和「空白行」这类清洗片段会自动把替换框一并填好,点击后直接看效果。

实现上的几个细节​

这些是手写实现时容易踩的坑,工具里都已经处理:

  • 零长匹配不会死循环:/a*/ 这类能在字符串末尾产生空匹配的表达式,迭代时需要手动推进游标
  • u 标志下按码点前进:否则 emoji 会被 UTF-16 代理对切成两半
  • 不高亮就看不到:g 标志只影响 replace / test 语义,所以即使没加 g,匹配列表和高亮依然展示全部命中
  • 命名组不会被数字组截胡:替换回调的参数顺序是 [p1..pN, offset, string, groups],groups 在最后
  • 高亮片段全部转义:命中内容里的 <、& 不会变成真实标签

隐私​

正则表达式和测试文本全部在浏览器内处理,不发起任何网络请求。关闭页面后不留存内容。