正则表达式匹配以逗号分隔的单个或多个电子邮件地址

时间:2016-05-11 13:49:50

标签: regex

我需要一个与以下类型的字符串匹配的正则表达式模式

#keyword1 a@b.com#keyword2 a@b.com;b@c.com;d@e.com

以下正则表达式模式并不能完全符合我的要求:

/(#)(?:keyword1|keyword2)\s([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)/g

上述正则表达式只能正确匹配#keyword1 a@b.com。 但是对于第二个,它匹配第一个分号之前的所有内容。我需要它来匹配整个事情。我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

我建议分两步解析字符串。首先将关键字与电子邮件地址数组区分开,然后拆分数组。

首先检索关键字和arrray,假设这是字符串所包含的全部内容。我使用的是JavaScript RegExp表示法,但您应该能够了解正在发生的事情。

假设字符串是"#keyword2 a@b.com; b@c.com; d@e.com"。

/^#(keyword1|keyword2) (.*)$/g

第1组将是" keyword2"第2组将是" a@b.com; b@c.com; d@e.com"。现在将以下模式应用于组2并循环匹配以检索每个电子邮件地址。

/([^;]*)(?:;|$)/g

此模式不会假设电子邮件地址是否格式正确,只是它们用分号分隔。如果只有一个电子邮件地址,这也有效。