You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取MIME消息中多行连续的Base64编码内容?

提取MIME消息中整块Base64内容的正则方案

问题背景

从MIME消息中提取Base64编码内容时,原有正则会逐行匹配Base64字符串,无法将同一分隔块内的多行内容合并为单个匹配。当内容包含PGP签名这类多段Base64时,会得到零散的多个匹配结果,无法直接拼接使用。

例如这段MIME内容:

--------------ra650umTsDNeI5lwXmFy5luF
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64

TG9yZW0gSXBzdW0NCg0KSGVyZSBpcyBzb21lIG1vcmUgdGV4dA0KDQpOb3cgb24gYSAzcmQg
bGluZQ0KDQoNClRoYW5rcw0KDQo=

--------------ra650umTsDNeI5lwXmFy5luF--

原有正则(仅匹配单行Base64):

var base64Regex = /^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{4}|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{2}={2})$/gm

改进后的正则

var base64Regex = /(?:^[A-Za-z0-9+\/]{4}(?:[A-Za-z0-9+\/]{4}|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{2}={2})?\s*)+(?=\s*----------)/gm

正则逻辑说明

  • 多行匹配合并:(?:^[A-Za-z0-9+\/]{4}(?:...)?) 匹配单行合法Base64,外层的+允许将连续多行Base64合并为一个匹配项,\s*兼容行尾的换行或空白字符
  • 块边界识别:(?=\s*----------) 是正向预断言,确保匹配的Base64内容后紧跟MIME分隔线(允许分隔线前有空白),以此精准界定单个Base64块的结束位置

效果

该正则会将同一MIME分隔块内的所有Base64行合并为单个匹配结果;若存在多个独立的Base64块,会分别生成对应的匹配项,直接获取后即可解码使用。

内容的提问来源于stack exchange,提问作者Derek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:35:27