跳到主要内容

用正则匹配提取从文本里批量抓出所有结果:邮箱、链接、价格、捕获组

不用写代码,粘文本写正则就能把所有邮箱、链接、价格批量提取出来,讲清全局匹配 g 标志取全部、捕获组取子串、去重清洗,附真实输入输出例子。

发布于 作者 李雷
#正则 #数据提取 #文本处理 #日志分析 #开发工具

用正则匹配提取从文本里批量抓出所有结果

手里有一份几千行的导出文件,你只想要里面所有的邮箱地址。复制粘贴一行一行选,选到第三十个就开始怀疑人生。其实这件事正则一条就能干完,前提是你得让它把全部匹配都吐出来,而不是只给第一个。下面把这套做法讲清楚,中间穿插一个能直接照着跑的真实例子。

提取和测试不是一回事

很多人写正则,是在测试器里反复改,看那条高亮的匹配对不对。这没错,但测试只关心"对不对",提取关心"全不全"。一条普通正则跑下去,默认在第一个命中处就停了。你要做的是批量采集,就得让它扫完整段文本,把每一个命中都收进列表。

这就是 正则匹配提取器 和单纯的测试工具的分工:前者输出一份可以直接复制走的结果列表,原文本原样不动;后者帮你确认这条正则到底命中了什么。两者配合最顺手,先在 正则测试器 里把正则磨对,再拿到提取器里一次性抓全。

全局匹配 g 标志:取全部而不是第一个

正则世界里最容易踩的坑,就是忘了 g 标志。没有它,execmatch 在第一个匹配处就停手,后面几百个命中被悄悄漏掉,还不报错。这种 bug 最难查,因为程序没崩,只是结果少了。

提取器的处理办法是始终以全局模式运行。哪怕你自己不写 g,它也会扫完整段文本。其余标志保持可选,各管一摊:

  • i 忽略大小写,Emailemail 都算
  • m^$ 按每一行匹配,处理多行文本时很关键
  • s 让点号 . 能跨过换行去匹配
  • u 打开完整 Unicode 处理,emoji 和中日韩文字才不会乱

记住一点:在提取器里跑得好的正则,复制进你自己的代码时,一定要补上 g,否则又会只拿到第一个。

真实例子:从一段文本提取所有邮箱

假设你粘进去这么一段:

联系人:zhang@toolora.info,备用 li.lei+work@gmail.com。
技术支持请发 support@toolora.info,重复的 support@toolora.info 也算一个。

正则填:

[\w.+-]+@[\w-]+\.[\w.-]+

打开「去重」和「每行一个」,输出就是干净的三行:

zhang@toolora.info
li.lei+work@gmail.com
support@toolora.info

那两个重复的 support 被去重合成一个,顶部的匹配数统计会告诉你原文里命中了四次、去重后剩三条。这一列可以直接粘进表格或群发工具,不用再手动滚动选中。价格也是一样的思路,把正则换成 [$¥]\d+(?:\.\d{2})?,一段商品描述里所有标价就一次性出来了。

捕获组:只取你要的那一截子串

有时候整段匹配里你只想要中间一小块。比如上面的邮箱,你其实只要域名。这时候用括号分组:

[\w.+-]+@([\w-]+\.[\w.-]+)

括号里那部分是第 1 组。在提取器的输出选择器里挑「捕获组 1」,结果列表就只剩 toolora.infogmail.com,域名被精准地拎了出来。

捕获组在日志分析里尤其好用。一条结构化日志 2026-06-13 ERROR req-8842 timeout,你想统计有哪些请求 id,就写一条在 id 外面加括号的正则,把输出切到那个组,几千行里立刻得到一列纯粹的 id。再配合去重数出有多少个不同请求,或者用逗号连起来塞进 SQL 的 IN 子句查库。整段匹配是第 0 组,括号从第 1 组开始数,这个编号一旦记混,抽出来的就是错的字段。

我自己常用的清洗流程

我处理同事丢过来的杂乱数据时,基本是固定三步。第一步,先在测试器里把正则改到只命中我要的东西,不多不少。第二步,拿到提取器,打开去重和每行一个,看顶部匹配数对不对得上肉眼估的数量,对不上就说明正则漏了或贪了。第三步,复制那份列表去用。最常翻车的是贪婪量词,<.+> 跑在一行 HTML 上会从第一个尖括号一路吃到最后一个,得改成懒惰的 <.+?> 或取反类 <[^>]+>,每个标签才分得开。这套流程让我不用为了一次性的提取去写脚本。

不用写代码,也不上传

这件事的好处是全程不碰编辑器。你不用新建文件、import 库、再 console.log 一遍,粘文本、写正则、抄结果就完事。所有运算都是浏览器标签页里的纯 JavaScript,你粘进去的文本不离开页面,不上传也不记录。正则写错了也不会一片空白,它会给一条清楚的红色提示指出问题,补上漏掉的右括号,结果立刻回来。

想系统地把正则语法补齐,可以收藏一份 正则速查表 放在手边,常用的字符类、量词、断言一翻就有。把这几样配起来,从文本里批量提数据这件事,基本就不再需要动代码了。


Made by Toolora · Updated 2026-06-13