首页 > 解决方案 > 解析名称值对的字符串

问题描述

我正在尝试解析此入站电子邮件 body_text,使其看起来像“员工开始日期”:“2021/09/07”

我试图通过 exReg 输入字符串,但无法正确格式化。有什么建议么?我最近更新了我的脚本。

谢谢!

Employee Start Date: 

2021/09/07

Employee ID:

123456789

Employee Preferred Name:

John Doe 

Employee Company:

Global
var emailObj = {};

    try {
        var valPairs = body_text;

        var regEx = /^(.+):(.+)$/; //Name is everything preceding first :, value everything after.

        var valPairs = body_text.split("\n").filter(function (item) { 
           
            return regEx.test(item);
        });

        var matches; 
        //loop through email body and build object
        for (var i = 0; i < valPairs.length; i++) {
            matches = valPairs[i].match(regEx);
            try {
                emailObj[matches[1].toString().trim()] = matches[2].toString().trim(); //Add trimmed name/val to object
            } catch (ex) {
                gs.error(ex.message);
            }
        }

    } catch (ex) {
        gs.error(ex.message);
    }
    console.log(emailObj)

名称值对需要位于同一行且没有换行符。我需要结果看起来像这样。

Employee Start Date: 2021/09/07
Employee ID: 123456789
Employee Preferred Name: John Doe
Employee Company: Global

提前致谢!

标签: javascriptarraysjsonparsing

解决方案


这是一个更好地格式化html的示例。它还将它从 JSON 字符串解析为一个 jS 对象。

const email = "Employee Start Date:<br> <br> 2021/09/07 <br> <br> Employee ID:<br> <br> 123456789 <br> <br> Employee Preferred Name:<br> <br> John Doe <br> <br> Employee Company: <br> <br> Global<br> <br>"

function extractData(str) {
  str = str.replace(/(:\s*(?:<br>\s*)+)/gm, '": "');
  str = str.replace(/(\s*(?:<br>\s*)+)/gm, '", "');
  str = str.replace(/(,\s*"$)/gm, '}');
  str = str.replace(/(^)/gm, '{"');
  return JSON.parse(str)
}

console.log(extractData(email))


推荐阅读