【问题标题】:How to split emails by no space , comma , semi-colon, and space using Regex?如何使用正则表达式按无空格、逗号、分号和空格分隔电子邮件?
【发布时间】:2017-10-17 02:11:40
【问题描述】:

我正在尝试使用正则表达式按空格、逗号、分号和空格分隔电子邮件。我有这个字符串:

var emails = "user1@email.comuser2gmail.com user3@email.com;user4@gmail.com, user5@email.com"

我正在尝试使用此正则表达式将所有电子邮件放入数组中:

function extractEmails() {
 return emails.match(/\w+@\w+.com/); 
}

但它似乎不起作用。关于如何使用正则表达式获取所有电子邮件的任何想法?提前谢谢!

【问题讨论】:

  • 除非您维护一个 TLD 列表,否则我看不到拆分 user1@email.comuser2gmail.com 之类的方法,我上次检查的时候是 pretty long
  • “没有空格” - 你不能。如果地址中的顶级域以与其他顶级域相同的字母开头怎么办?例如,“bargainshunter”应该拆分为“bar”和“gainshunter”,还是拆分为“bargains”和“hunter”?

标签: javascript regex


【解决方案1】:

您只需添加g 修饰符即可获得所有匹配项:

var emails = "user1@email.comuser2gmail.com\nuser3@email.com;user4@gmail.com, user5@email.com";

function extractEmails() {
 return emails.match(/\w+@\w+.com/g); 
}

console.log(
  extractEmails(emails)
);

(当然,只要@之前的部分不包含.com,这将起作用,如果有barcom.com域,它也会失败......)

【讨论】:

  • 您好CBroe,感谢您的意见。如果有 2 封电子邮件以 NO SPACE 分隔,有什么方法可以抛出错误?
  • 好吧,如果您只需要匹配以.com 结尾的地址,那么这应该按原样工作(除了提到的边缘情况。)至于检查您是否有foo@bar.comlorem@ipsum 在结果,我建议对它们进行循环并使用第二个正则表达式单独测试它们,以测试这种模式;将两者塞进一个可能会变得相当复杂。
  • 如果您需要匹配任何 TLD(.app、.io、.network、.org 等),我发现这很适合我:emails.match(/\w+@\w+.\w+/g);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 2020-01-03
  • 2014-06-22
相关资源
最近更新 更多