[英]RegEx match only final domain name from any email address
我想从一个电子邮件地址,这可能会或可能不会有一个子只匹配父域名。
到目前为止,我已经尝试过了:
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
注意 :在投反对票之前,请注意,我既无法使用现有答案,也无法与现有问题匹配。
您可以使用一个简单的正则表达式仅获取域名的后2个部分:
/[^.]+\.[^.]$/
它匹配一个非周期字符序列,然后是句点和另一个非周期序列,所有这些都在字符串的末尾。 此正则表达式不能确保此域名出现在“ @”之后。 如果您想制作一个正则表达式也可以做到这一点,则可以使用带有“ *?”的惰性匹配:
/@.*?([^.]+\.[^.])$/
但是,我认为尝试立即执行所有操作往往会使make正则表达式更加复杂且难以阅读。 在此问题中,我希望分两步执行操作:首先检查电子邮件中是否包含“ @”。 然后,在“ @”之后得到该部分,并将其传递给简单的正则表达式,该正则表达式将提取域名。
分离事物的优点之一是某些更改更容易。 例如,如果您要确保电子邮件中仅包含一个“ @”,则很容易在单独的步骤中进行操作,但是在“执行所有操作”正则表达式中很难实现。
您可以使用此正则表达式:
/@(?:[^.\s]+\.)*([^.\s]+\.[^.\s]+)$/gm
将捕获的组#1用于结果。
@
后跟0或多个非DOT文本实例和一个DOT,即(?:[^.\\s]+\\.)*
。 ([^.\\s]+\\.[^.\\s]+)$
可以匹配并捕获由DOT
分隔的最后两个分量。 使用以下maindomain
应始终返回字符串的maindomain.com位。
var pattern = new RegExp(/(?:[\.@])(\w[\w-]*\w\.\w*)$/);
var str = "abc@subdomain.maindomain.com";
var maindomain = str.match(pattern)[1];
http://codepen.io/anon/pen/RRvWkr
编辑:进行了调整,以禁止以连字符开头的域,即-'-yahoo.com'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.