我想要从电子邮件地址匹配仅父域名,该电子邮件地址可能有也可能没有子域名。
到目前为止,我已经尝试过这个:
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
注意 :在投票前,请注意我既没有使用现有答案,也没有与现有答案相匹配。
答案 0 :(得分:2)
您只能使用一个简单的正则表达式来获取域名的最后两部分
/[^.]+\.[^.]$/
它匹配一系列非句点字符,后跟句点和另一个非句点序列,全部位于字符串的末尾。此正则表达式不能确保此域名在“@”之后发生。如果你想制作同样的正则表达式,你可以使用与“*?”的懒惰匹配:
/@.*?([^.]+\.[^.])$/
然而,我认为一次尝试做所有事情往往会使make regex更复杂,难以阅读。在这个问题上,我更愿意分两步完成:首先检查电子邮件中是否有“@”。然后你得到“@”之后的部分并将其传递给简单的正则表达式,它将提取域名。
分离事物的一个好处是一些变化更容易。例如,如果你想确保你的电子邮件中只有一个“@”,那么在单独的步骤中很容易做到,但在“do everything”正则表达式中实现它会很棘手。
答案 1 :(得分:1)
您可以使用此正则表达式:
/@(?:[^.\s]+\.)*([^.\s]+\.[^.\s]+)$/gm
使用捕获的组#1获取结果。
@
后跟0或更多非DOT文本实例和DOT即(?:[^.\s]+\.)*
。([^.\s]+\.[^.\s]+)$
匹配并捕获由DOT
分隔的最后2个组件。答案 2 :(得分:0)
使用以下document.getElementsByById("img_1_id");
应始终返回字符串的maindomain.com位。
maindomain
http://codepen.io/anon/pen/RRvWkr
编辑:调整以禁止以连字符开头的域名,即'-yahoo.com'