我正在嘗試使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可用,因此與它們匹配不會有所幫助:http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains – nils
作爲旁註,使用「i」標誌,您不需要指定不同的情況(即'com'和'COM'將匹配相同的東西,所以你可以將它們作爲重複刪除) –
我建議你決定什麼符合**有效** TLD *格式*。即六個字符與可選的兩個字符的國家,等。 [這個鏈接](http://www.regular-expressions.info/email.html)有很好的信息來決定這些事情,遠遠超過應該留在這裏。 –