我正在尝试创建一个可以匹配电子邮件地址的域部分的RegEx。现在我必须使用其中两个,一个获取所有电子邮件地址,然后另一个匹配域名,但我仍然遇到问题。
现在我的代码是:
var email_ex = /[a-zA-Z0-9]+(?:(\.|_)[A-Za-z0-9!#$%&'*+/=?^`{|}~-]+)*@(?!([a-zA-Z0-9]*\.[a-zA-Z0-9]*\.[a-zA-Z0-9]*\.))(?:[A-Za-z0-9](?:[a-zA-Z0-9-]*[A-Za-z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?/ig; // Match all email addresses on page
email_ex = new RegExp(email_ex);
var domain_ex = /[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU|CO\.UK|AU|LI|LY|IT|IO)/ig // Match all domains
domain_ex = new RegExp(domain_ex);
var match = document.body.innerText; // Location to pull our text from. In this case it's the whole body
match = match.match(email_ex); // Run the RegExp on the body's textContent
我宁愿不必列出TLD列表,但我找不到足够好的表达
答案 0 :(得分:4)
最简单的RegExp:/@([^\s]*)/
var email = "test@example.domain";
var domain = email.match(/@([^\s]*)/)[1];
答案 1 :(得分:1)
如果您不希望正则表达式找到有效的电子邮件地址,因为您可以预先确定您有一个(如果电子邮件地址是一个网页,它们大多数有效),您可以使用此:
域名不能包含@' s你可以使用所有字符直到最后@
(.*)@(.*)
你可以确定你的域名在第二组
答案 2 :(得分:1)
+1 @strah,答案很有效,但对于这个例子“@ example.domain”,返回的是“example.domain”,在我看来,它应该为null,因为它不是有效的电子邮件。 / p>
如果您想对电子邮件格式格外严格,可以按照以下步骤操作:
var r = /[^\s]+@([^\s]+)/;
r.exec("d@testing.domain")[1]; //outputs: testing.domain
r.exec("@testing.domain")[1]; //outputs: null
答案 3 :(得分:0)
我同意您不应该有TLD列表。您的正则表达式已经遗漏了很多,随着通用TLD变得越来越普遍,这将成为一个非常长的列表。这应该让你非常接近:
(?<=@)(?:[a-zA-Z0-9][-a-zA-Z0-9]*[a-zA-Z0-9]\.)+[a-zA-Z0-9]{2,}
或评论:
(?<=@) (?# Check it is preceeded with @ )
(?: (?# start of subdomain block )
[a-zA-Z0-9][-a-zA-Z0-9]*[a-zA-Z0-9] (?# subdomain )
\.)+ (?# end of subdomain, including dot, repeats )
[a-zA-Z0-9]{2,} (?# TLD )
答案 4 :(得分:0)
您应该能够结合查找电子邮件和捕获 单个操作中的域部分和单个正则表达式。
使用html5规范中的正则表达式作为示例,但使用你的 然后只需插入捕获组。
# http://www.w3.org/TR/html5/forms.html#valid-e-mail-address
# /[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)/
[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+
@
( # (1 start)
[a-zA-Z0-9]
(?:
[a-zA-Z0-9-]{0,61}
[a-zA-Z0-9]
)?
(?:
\.
[a-zA-Z0-9]
(?:
[a-zA-Z0-9-]{0,61}
[a-zA-Z0-9]
)?
)*
) # (1 end)