解析 outlook 格式的邮件

Parse emails in outlook format

我正在尝试解析以下字符串,以便我可以获取数组中 <> 个字符之间的电子邮件。

Some Name <emai1@email.com>; Some Name2 <emai2@email.com>; Some Name 3 <emai3@email.com>; Some Name 4 <emai4@email.com>;

我环顾四周并尝试了很多我在网上找到的正则表达式来解决类似的问题:

const result = str.match(/(?<=<)\w+(?=>)/g) || [];

然而 none 有效,现在我只是蒙着眼睛用头撞砖墙。

非常感谢您的帮助。

您可以匹配 <> 并且可以使用带有否定字符的捕获组 class:

<([^\s<>@]+@[^\s<>@]+)>
  • < 比赛开场 <
  • ( 捕获 组 1
    • [^\s<>@]+ 匹配除空白字符以外的任何字符 < > @
    • @[^\s<>@]+ 匹配 @ 并再次匹配之前的模式
  • ) 关闭组 1
  • > 比赛结束 >

regex demo

或者如果末尾必须有一个点:

<([^\s<>@]+@[^\s<>@]+\.[^\s<>@]+)>

Regex demo

const s = "Some Name <emai1@email.com>; Some Name2 <emai2@email.com>; Some Name 3 <emai3@email.com>; Some Name 4 <emai4@email.com>;";
const regex = /<([^\s<>@]+@[^\s<>@]+)>/g;
let result = Array.from(s.matchAll(regex), m => m[1])
console.log(result);