还在为 Filter 节点抓狂?这可能是你最硬核的一次正则表达式学习
在 N8N 大学的后台私信里,笔者发现一个高频问题:“Filter 节点到底怎么写正则?能不能给个现成的?”
说实话,我特别理解这种心情。正则表达式(Regex)这东西,看着像乱码,写起来像造原子弹。很多人在 n8n 里搭建自动化流程时,前面的 Webhook、HTTP Request 都跑得很顺,偏偏在 Filter 节点这里卡住了——想要筛选出“包含特定关键词的邮件”却漏掉了大小写,或者想提取手机号却匹配到了错误的数字。
今天,N8N 大学干脆不讲枯燥的理论了。我们直接把市面上最高频、最实用的 4 个正则表达式案例甩出来。别问为什么,直接抄作业,用到哪学到哪。
案例一:模糊匹配“包含关键词”的邮件
这是最常见的场景。比如你有一个客户反馈的 Webhook,只想处理那些内容里包含“退款”或“投诉”的工单。
在 Filter 节点中,你可以使用简单的 `.*关键词.*` 模式。这种写法的意思是:关键词前面可以有任意字符,后面也可以有任意字符。
实战抄写:
- 字段(Field):
{{ $json.content }}(假设你的数据里有 content 字段) - 正则表达式(Regex):
.*(退款|投诉).*
避坑提示: 这里的 | 符号代表“或”的意思。如果你的关键词是中文,一定要确保你的数据源编码是 UTF-8,否则 n8n 可能会因为字符集问题匹配失败。
案例二:严格校验中国大陆手机号
如果你在通过表单收集用户信息,肯定不想收到来自火星的电话号码。Filter 节点可以帮你做第一道防线。
中国大陆手机号目前主要是 13、15、17、18、19 开头的 11 位数字。我们需要一个严格的正则来确保它既不是 12345678901 这种假数据,也不是 8 位固话。
实战抄写:
- 字段(Field):
{{ $json.phone }} - 正则表达式(Regex):
^1[3-9]d{9}$
代码解析:
^ 表示开始
1 表示必须以 1 开头
[3-9] 表示第二位必须是 3 到 9 之间的数字
d{9} 表示后面跟着 9 个任意数字
$ 表示结束(防止后面有多余的字符)
案例三:提取特定格式的日期或订单号
有时候我们需要的不是“通过/不通过”,而是“提取数据”。比如从一段杂乱的日志中提取出 2023-10-27 这种格式的日期。
虽然 n8n 有专门的正则提取工具,但在 Filter 节点里,我们通常先用正则来验证数据的完整性。
实战抄写:
- 字段(Field):
{{ $json.log_message }} - 正则表达式(Regex):
d{4}-d{2}-d{2}
场景延伸: 如果你想匹配类似 “ORD-20231027-12345” 这样的订单号,可以写成:ORD-d{8}-d{5}。这里的 d 代表数字,{n} 代表重复次数。
案例四:处理“脏数据”——忽略大小写与空格
这是新手最容易栽跟头的地方。用户输入的 "Apple" 和 "apple" 在系统眼里是两码事。如果你不想因为大小写问题漏掉重要数据,必须学会忽略大小写模式。
在 n8n 的 Filter 节点中,正则表达式默认是区分大小写的。我们需要通过修饰符(Flags)来改变这个行为。
实战抄写:
- 字段(Field):
{{ $json.product }} - 正则表达式(Regex):
apple|iphone|ipad - 关键设置: 在 Filter 节点的设置中,找到 Regex 选项,通常旁边会有一个输入框让你填 Flags。请填写
i。
硬核解释: 字母 i 在正则世界里代表 ignore case(忽略大小写)。加上它,"APPLE"、"Apple"、"aPpLe" 都会被视为匹配。这能极大提升你的自动化流程的鲁棒性。
Filter 节点的高级玩法:多条件组合
现实世界的业务逻辑很少是单一的。我们经常需要“包含 A 关键词,且手机号正确,但排除 B 域名”。
N8N 的 Filter 节点允许你组合多个规则。你可以添加多个条件行,选择“AND”或“OR”逻辑。
组合示例:
- 条件一:Regex 匹配
^1[3-9]d{9}$(AND) - 条件二:Regex 不匹配
@test.com$(排除测试邮箱)
这种组合方式比写一个超长的、难以维护的正则表达式要清晰得多,也更方便后续排查错误。
FAQ:N8N 用户最常见的 3 个问题
1. 为什么我的正则在 n8n 里测试通过了,运行却没效果?
大概率是数据路径(Path)写错了。请检查你的字段路径是否以 $json. 开头,且和上游节点输出的数据结构完全一致。另外,如果上游数据是空的,正则也会匹配失败。
2. n8n 的 Filter 节点支持 Lookbehind (后行断言) 吗?
这取决于你使用的 n8n 版本和 Node.js 环境。n8n 底层运行在 Node.js 上,较新版本的 Node.js 支持 ECMAScript 2018 标准的后行断言(如 (?<=A)B)。但为了兼容性,N8N 大学建议尽量使用标准的、跨版本兼容的正则写法,避免使用过于冷门的语法。
3. 如何快速调试复杂的正则表达式?
不要在 n8n 里盲调。推荐使用在线工具如 Regex101.com 或 RegExr.com。把你的测试字符串贴进去,它可以高亮显示匹配结果,甚至告诉你哪里写错了,比在 n8n 里反复试错效率高出 10 倍。
总结与资源
正则表达式是自动化开发的“内功心法”。虽然 n8n 提供了 UI 界面操作 Filter 节点,但掌握几个核心的正则案例,能让你的流程从“能跑”升级到“好用且稳健”。
笔者建议大家不要死记硬背,而是把上面的案例存进你的笔记里。下次遇到类似需求,直接复制粘贴,根据你的字段微调即可。
更多资源:
- N8N 大学官网:n8ndx.com (持续更新硬核教程)
- 正则表达式可视化工具:regexr.com
- n8N 官方文档:Filter Node 参数详解