如何解析入站邮件body_text,提取跨换行的键值对并格式化输出
邮件正文键值对提取解决方案
问题根因
- 你所使用的正则仅支持匹配键与值在同一行的文本,但待解析的原始邮件内容中,键(带冒号的字段名)和对应值分两行存储,还夹杂大量空行,导致原有正则匹配不到有效内容。
修复后代码
var emailObj = {}; try { // 预处理:拆分内容为行,过滤空行、每行去除首尾空格 var validLines = body_text.split("\n") .map(line => line.trim()) .filter(line => line.length > 0); for (var i = 0; i < validLines.length; i++) { var currentLine = validLines[i]; // 识别键行:包含冒号的行即为字段名行 if (currentLine.includes(":")) { var key = currentLine.split(":")[0].trim(); var value = ""; // 兼容两种情况:键值同行 / 键值分行 var sameLineValue = currentLine.split(":")[1].trim(); if (sameLineValue) { value = sameLineValue; } else if (i + 1 < validLines.length && !validLines[i+1].includes(":")) { value = validLines[i+1].trim(); // 跳过已取值的下一行,避免重复判断 i++; } emailObj[key] = value; } } // 如需要输出指定格式的拼接文本,可使用以下代码 var formatOutput = Object.entries(emailObj).map(([key, val]) => `${key}: ${val}`).join("\n"); console.log(formatOutput); console.log(emailObj); } catch (ex) { gs.error(ex.message); }
效果验证
使用你提供的原始内容测试,运行后输出的formatOutput刚好符合你要求的格式:
Employee Start Date: 2021/09/07 Employee ID: 123456789 Employee Preferred Name: John Doe Employee Company: Global
同时生成的emailObj对象可以直接调用对应字段取值。
内容的提问来源于stack exchange,提问作者Dan Chan
相关产品推荐
相关产品推荐

