【问题标题】:Parsing String for name value pairs [closed]解析名称值对的字符串 [关闭]
【发布时间】:2021-10-28 20:27:10
【问题描述】:

我正在尝试解析此入站电子邮件 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

提前致谢!

【问题讨论】:

  • 不要让人猜测当前代码有什么问题。告诉他们。
  • 更新了事实。感谢您的提醒。
  • 什么是“匹配”,什么会使其验证为真?甚至在做什么验证?
  • 由于整个语句是一个字符串,我有一个正则表达式检查:之前的键和:之后的值,如果它在同一行。出于某种原因,我无法在每个名称值对之后换行。一旦看到换行符,valPairs 就会检查验证。如果match = true,它会将所有对象循环到一个json数组中,这样我就可以按键调用对象了。
  • 电子邮件字符串没有换行符,所以它永远找不到。另外,不同的键值对之间没有逗号,所以它不会得到你想要的。

标签: javascript arrays json parsing


【解决方案1】:

这是一个更好地格式化 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))

【讨论】:

  • 谢谢!现在我们正在取得进展。
  • 我以为我们做到了。它适用于 Visual Studio Code,但不幸的是它在 ServiceNow 的客户端脚本中不起作用。我收到一个错误“错误:字符串包含控制字符,详细信息:字符串包含控制字符”下面是我要解析的内容。入站电子邮件中有一个额外的行,其中名称值对必须与以下格式位于同一行。员工入职日期:2021/08/17 ``` 员工入职日期:2021/08/17 员工 ID:61028517 员工首选姓名:Dan Chan 员工公司:iProspect ```
猜你喜欢
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 2021-02-03
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多