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

使用正则将邮件文本转对象数组:循环分隔信息块的实现问题

JavaScript 提取邮件文本信息块转为对象数组方案

我来帮你搞定这个问题!你要处理的是从邮件里提取的结构化文本,把每一行的信息转成对象存进数组对吧?之前卡在循环分隔信息块的地方,我给你整理了一套可行的实现思路和代码:

实现步骤

  1. 分割原始文本为单个信息块:
    你的每个信息块都是单独一行,所以先用split('\n')把整个文本拆成一行行的,再用filter去掉空行或者无效的空白行,避免处理无效内容。

  2. 遍历每个信息块,解析为对象:
    用正则表达式匹配每个信息块里的键: 值结构,把匹配到的键值对逐个添加到对象中,最后把对象存入数组。

完整代码示例

// 假设这是你从邮件里提取的原始文本
const emailExtractedText = `Name: Andy Computer: ABC IP: 192.168.0.1 Added By: Maria Timestamp: 2018-03-15 08:45:08 +0000 UTC
Name: Richard Computer: CDE IP: 192.168.0.2 Timestamp: 2018-03-15 08:45:08 +0000 UTC`;

// 用来存储最终结果的数组
const infoArray = [];

// 第一步:拆分文本为单个信息块,过滤空行
const infoBlocks = emailExtractedText.split('\n').filter(block => block.trim() !== '');

// 第二步:遍历每个信息块,解析成对象
infoBlocks.forEach(block => {
  const currentInfo = {};
  // 正则匹配带空格的键名(比如Added By)和对应的值
  // 解释下正则:
  // ([\w\s]+) 匹配键名,支持带空格的情况
  // :\s* 匹配冒号和后面的任意空格
  // (.+?) 非贪婪匹配值,避免把后面的键名包含进来
  // (?=\s+[\w\s]+:|$) 正向预查,确保匹配到下一个键名或者行尾就停止
  const regexPattern = /([\w\s]+):\s*(.+?)(?=\s+[\w\s]+:|$)/g;
  
  let matchResult;
  // 循环提取所有键值对
  while ((matchResult = regexPattern.exec(block)) !== null) {
    const key = matchResult[1].trim();
    const value = matchResult[2].trim();
    currentInfo[key] = value;
  }
  
  // 把解析好的对象存入数组
  infoArray.push(currentInfo);
});

// 打印结果看看效果
console.log(infoArray);

代码说明

  • 正则表达式我特意调整成支持带空格的键名(比如示例里的Added By),如果你的键名都是单个单词,也可以把正则里的[\w\s]+换成\w+,效果一样。
  • filter方法用来过滤空行,避免处理那些没有内容的无效行,让代码更健壮。
  • 用while循环配合regex.exec()可以逐个提取每个信息块里的所有键值对,确保不会遗漏任何信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:22:23