在javascript中高效解析电子邮件正文

在javascript中高效解析电子邮件正文,javascript,Javascript,我需要解析多个电子邮件正文,如下所示: Name: Bob smith Email: hellol@aol.com Phone Number: 4243331212 作为更大程序的一部分,我有以下功能来解析页面: function parseBody(i, body) { result = [] result[0] = i var name = body.match(new RegExp(/\*Name:\*(.*) /)) if (name) { result[1] = na

我需要解析多个电子邮件正文,如下所示:

Name: Bob smith
Email: hellol@aol.com
Phone Number: 4243331212
作为更大程序的一部分,我有以下功能来解析页面:

function parseBody(i, body) {

result = []
result[0] = i

var name = body.match(new RegExp(/\*Name:\*(.*) /))
if (name) { 
     result[1] = name[1]
}

......

   return result;

}

有没有一种更有效的方法可以使用JavaScript来解析此页面并加载数组,而不是使用if语句解析并加载到结果数组中的10个字段?

我建议找到一种方法来拆分主体并识别键和值以构建结果对象

  • 为了分割主体,可以使用正则表达式匹配键的结构:

    let delimiter = new RegExp('(\w*): ')
    
  • 然后在此regexp的主体上使用split方法来获得一个具有键和值交替的数组:

    let split = body.split(delimiter)
    
  • 最后,使用循环对值中的键进行排序:

    let res = {}
    for(let i = 0; i < split.length; i += 2)
      res[ split[i] ] = split[ i+1 ]  // even indexes are key, odd ones are values
    
    let res={}
    对于(设i=0;i
向前推可以删除空键和尾随空格,并使用更高级的regexp回车。下面是一个可能的实现:

    function parseBody (body) {
      let split = body
        .split(new RegExp('(\w*): ([^\t\r\n]*)[\t\r\n]*')) // removes trailing line feed
        .filter(x=>x) // remove empty matches
      let res = {}
      for(let i = 0; i < split.length; i += 2)
        res[ split[i] ] = split[ i+1 ] // even indexes are key, odd ones are values
      return res
    }
函数解析体(body){
让分裂=身体
.split(新的RegExp('(\w*):([^\t\r\n]*)[\t\r\n]*')//删除尾随换行符
.filter(x=>x)//删除空匹配项
设res={}
对于(设i=0;i

这将返回一个关联数组,但如果您想要一个简单数组,您可以考虑。

处理数字和未定义的数组

var mailBody=`
姓名:鲍勃·史密斯
电邮:hellol@aol.com
电话号码:4243331212
键4:值4
键5:值5
关键6:
键7:值7
`;
var obj={};
mailBody.split('\n').forEach(v=>v.replace(/\s*(.*)):\s*(.*)\s*/,(s,key,val)=>{

obj[key]=isNaN(val)| | val.length我不明白“10个字段”是什么意思?你给出的示例只有3个。只需分成几行,然后在每个字段上取冒号后面的部分?谢谢,这是一个非常有趣的想法。我在“let split=body”中得到一个错误:“Missing;before statement.”lineI没有收到任何错误,您使用的是什么解释器或linter?您将问题标记为JavaScript,google脚本应用程序不支持ES6语法。如果您将“let”替换为“var”,将“x=>x”替换为“function(x){return x}”,则脚本将正常工作