正则表达式仅匹配来自任何电子邮件地址的最终域名
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"]
我对第二场比赛(小组赛)感兴趣
我的 objective 是,在这两种情况下,我希望组匹配并只给我 maindomain.com
注意:在否决票之前,请注意我既不能使用现有的答案,也不能匹配现有的问题。
您可以使用一个简单的正则表达式来仅获取域名的最后 2 部分是
/[^.]+\.[^.]$/
它匹配一个非句点字符序列,然后是句点和另一个非句点序列,都在字符串的末尾。此正则表达式不能确保此域名出现在“@”之后。如果你想制作一个也能做到这一点的正则表达式,你可以使用延迟匹配 "*?":
/@.*?([^.]+\.[^.])$/
但是,我认为尝试一次完成所有事情往往会使 make 正则表达式更加复杂且难以阅读。在这个问题中,我宁愿分两步做事:首先检查电子邮件中是否有“@”。然后你得到“@”后面的部分并将它传递给简单的正则表达式,它将提取域名。
将事物分开的一个好处是一些更改更容易。例如,如果你想确保你的电子邮件中只有一个“@”,它很容易在单独的步骤中完成,但在 "do everything" 正则表达式中实现起来会很棘手。
您可以使用这个正则表达式:
/@(?:[^.\s]+\.)*([^.\s]+\.[^.\s]+)$/gm
使用捕获的第 1 组作为结果。
- 它匹配
@
后跟 0 个或多个非 DOT 文本实例和一个 DOT,即 (?:[^.\s]+\.)*
.
- 使用
([^.\s]+\.[^.\s]+)$
它匹配并捕获由 DOT
分隔的最后 2 个组件。
对于下面的 maindomain
应该总是 return 字符串的 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'
我想匹配 仅 来自电子邮件地址的父域名,该电子邮件地址可能有也可能没有子域。
到目前为止我试过这个:
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"]
我对第二场比赛(小组赛)感兴趣
我的 objective 是,在这两种情况下,我希望组匹配并只给我 maindomain.com
注意:在否决票之前,请注意我既不能使用现有的答案,也不能匹配现有的问题。
您可以使用一个简单的正则表达式来仅获取域名的最后 2 部分是
/[^.]+\.[^.]$/
它匹配一个非句点字符序列,然后是句点和另一个非句点序列,都在字符串的末尾。此正则表达式不能确保此域名出现在“@”之后。如果你想制作一个也能做到这一点的正则表达式,你可以使用延迟匹配 "*?":
/@.*?([^.]+\.[^.])$/
但是,我认为尝试一次完成所有事情往往会使 make 正则表达式更加复杂且难以阅读。在这个问题中,我宁愿分两步做事:首先检查电子邮件中是否有“@”。然后你得到“@”后面的部分并将它传递给简单的正则表达式,它将提取域名。
将事物分开的一个好处是一些更改更容易。例如,如果你想确保你的电子邮件中只有一个“@”,它很容易在单独的步骤中完成,但在 "do everything" 正则表达式中实现起来会很棘手。
您可以使用这个正则表达式:
/@(?:[^.\s]+\.)*([^.\s]+\.[^.\s]+)$/gm
使用捕获的第 1 组作为结果。
- 它匹配
@
后跟 0 个或多个非 DOT 文本实例和一个 DOT,即(?:[^.\s]+\.)*
. - 使用
([^.\s]+\.[^.\s]+)$
它匹配并捕获由DOT
分隔的最后 2 个组件。
对于下面的 maindomain
应该总是 return 字符串的 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'