首页 n8n教程 n8n数据加工代码:正则提取与Base64二进制转换(附:内存溢出避免技巧)

n8n数据加工代码:正则提取与Base64二进制转换(附:内存溢出避免技巧)

作者: Dr.n8n 更新时间:2025-12-19 02:00:41 分类:n8n教程

Webhook 数据乱成一锅粥?先别急着删节点,你可能只是缺了这把“瑞士军刀”

上周帮一家跨境电商客户排查自动化流程时,他们哭诉:“Dr. n8n,我们从 Shopify 接到的订单 Webhook 里,客户备注字段混着 emoji、换行符和 Base64 图片,下游系统直接报错崩溃!”——这根本不是配置问题,而是数据没经过“精加工”。今天我就手把手教你用 n8n 的 Function 节点,像处理食材一样,把原始数据切成你需要的样子。

正则表达式:给混乱文本做“外科手术”

想象你收到一封邮件,正文写着:“请于【2025-04-05】前支付尾款 ¥3,200 元至账户 xxx”,但你的财务系统只认“YYYY-MM-DD”格式日期和纯数字金额。这时候,正则就是你的手术刀。

我在实际项目中最爱用的正则技巧是:先肉眼观察样本数据,圈出“锚点字符”(比如【】或¥),再用在线工具 regex101.com 预调试,最后粘贴进 n8n。千万别一上来就写复杂表达式,那是在给自己埋雷。
// 在 n8n Function 节点中提取日期和金额
const text = $input.all()[0].json.customer_note;
const dateRegex = /【(d{4}-d{2}-d{2})】/;
const amountRegex = /¥([d,]+)/;

const extractedDate = text.match(dateRegex)?.[1] || null;
const extractedAmount = text.match(amountRegex)?.[1]?.replace(/,/g, '') || null;

return { json: { clean_date: extractedDate, clean_amount: extractedAmount } };

Base64 二进制转换:让图片和文件“乖乖听话”

很多用户以为 Base64 是“加密”,其实它更像“搬家打包”——把二进制文件(如图片)转成 ASCII 字符串,方便在网络上传输。但在 n8n 里,如果你直接把 Base64 字符串喂给 HTTP Request 节点上传,十有八九会失败。因为你没告诉系统:“嘿,这是张图,不是普通文本!”

// 将 Base64 字符串还原为 Buffer,供后续节点使用
const base64String = $input.all()[0].json.image_data.split(',')[1]; // 去掉 data:image/png;base64, 前缀
const buffer = Buffer.from(base64String, 'base64');

return { 
  json: { 
    filename: 'avatar.png', 
    data: buffer.toString('base64'), // 重新编码为 base64 以兼容多数节点
    mimeType: 'image/png' 
  } 
};

内存溢出?别让大象挤进小冰箱——三大避坑指南

上周有个学员在处理 50MB 的 PDF Base64 转换时,n8n 容器直接 OOM(Out of Memory)。他差点重装服务器。其实只要三招就能避免:

  1. 分片处理:用 SplitInBatches 节点把大数组切成小块,每批 50 条记录,给内存喘息空间。
  2. 及时清理:在 Function 节点末尾,用 delete item.json.rawData; 主动删除不再需要的原始大字段。
  3. 懒加载思维:不到万不得已,别在早期节点 decode 大文件。把转换操作尽量往后放,配合条件判断,只处理真正需要的记录。
场景推荐策略
处理 1000+ 条记录SplitInBatches + 每批 50 条
含大附件 Base64延迟解码 + 流式上传
高频正则匹配预编译正则 + 缓存结果

总结:数据加工的本质,是“驯化”而非“搬运”

无论是正则提取关键信息,还是 Base64 与二进制的灵活转换,核心思路都是:在数据进入核心业务逻辑前,把它变成“系统喜欢的样子”。再加上内存管理的三板斧,你的自动化流程就能既精准又健壮。

你在 n8n 里踩过哪些数据加工的坑?或者有什么独门正则秘籍?欢迎在评论区甩出来,我们一起拆解优化!