RegEx仅匹配来自任何电子邮件地址

时间:2016-08-12 18:43:25

标签: javascript regex regex-lookarounds

我想要从电子邮件地址匹配父域名,该电子邮件地址可能有也可能没有子域名。

到目前为止,我已经尝试过这个:

new RegExp(/.+@(:?.+\..+)/);

结果:

Input: abc@subdomain.maindomain.com
Output: ["abc@subdomain.domain.com", "subdomain.maindomain.com"]

Input: abc@maindomain.com
Output: ["abc@maindomain.com", "maindomain.com"]

我对第二场比赛(小组)感兴趣 我的目标是,在这两种情况下,我希望小组匹配,只给我 maindomain.com

注意 :在投票前,请注意我既没有使用现有答案,也没有与现有答案相匹配。

3 个答案:

答案 0 :(得分:2)

您只能使用一个简单的正则表达式来获取域名的最后两部分

/[^.]+\.[^.]$/

它匹配一系列非句点字符,后跟句点和另一个非句点序列,全部位于字符串的末尾。此正则表达式不能确保此域名在“@”之后发生。如果你想制作同样的正则表达式,你可以使用与“*?”的懒惰匹配:

/@.*?([^.]+\.[^.])$/

然而,我认为一次尝试做所有事情往往会使make regex更复杂,难以阅读。在这个问题上,我更愿意分两步完成:首先检查电子邮件中是否有“@”。然后你得到“@”之后的部分并将其传递给简单的正则表达式,它将提取域名。

分离事物的一个好处是一些变化更容易。例如,如果你想确保你的电子邮件中只有一个“@”,那么在单独的步骤中很容易做到,但在“do everything”正则表达式中实现它会很棘手。

答案 1 :(得分:1)

您可以使用此正则表达式:

/@(?:[^.\s]+\.)*([^.\s]+\.[^.\s]+)$/gm

使用捕获的组#1获取结果。

  • 它匹配@后跟0或更多非DOT文本实例和DOT即(?:[^.\s]+\.)*
  • 使用([^.\s]+\.[^.\s]+)$匹配并捕获由DOT分隔的最后2个组件。

RegEx Demo

答案 2 :(得分:0)

使用以下document.getElementsByById("img_1_id"); 应始终返回字符串的maindomain.com位。

maindomain

http://codepen.io/anon/pen/RRvWkr

编辑:调整以禁止以连字符开头的域名,即'-yahoo.com'