匹配电子邮件域部分的最佳正则表达式
Best regular expression for matching the domain part of emails
我试图使一个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
我宁愿没有顶级域名的列表,但我还没能找到一个足够好的表达式
最简单的RegExp: /@([^'s]*)/
var email = "test@example.domain";
var domain = email.match(/@([^'s]*)/)[1];
如果你不想让一个正则表达式找到一个有效的电子邮件地址,因为你可以预先确定你有一个(如果电子邮件地址是一个网页,他们大多是有效的),你可以使用这个:
域不能包含@,但可以占用所有字符,直到最后一个@
(.*)@(.*)
,你可以确保你的域名在第二组
+1对于@strah,答案很好,但是对于这个示例"@example "。域"返回是"的例子。域名",在我看来,它应该是空的,因为它不是一个有效的电子邮件。
如果你想对电子邮件的格式要求更严格,你可以这样做:
var r = /[^'s]+@([^'s]+)/;
r.exec("d@testing.domain")[1]; //outputs: testing.domain
r.exec("@testing.domain")[1]; //outputs: null
我同意你不应该有一个顶级域名列表。你的正则表达式已经缺少了很多,随着通用顶级域名变得越来越普遍,这将成为一个非常长的列表。这应该会让你非常接近:
(?<=@)(?:[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 )
您应该能够结合查找电子邮件和捕获
域部分在一个单一的操作和一个单一的正则表达式。
使用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)
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 从正则表达式文本中获取正则表达式字符串表示的最佳方式
- 在正则表达式中指定新行数的最佳实践
- 在数组中存储 JS 正则表达式捕获组的最佳方法
- 最佳正则表达式方法
- 地址号码的最佳javascript正则表达式
- 验证用户名-最佳正则表达式
- 匹配电子邮件域部分的最佳正则表达式