[英]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"]
我對第二場比賽(該小組)感興趣。
我的目標是,在兩種情況下,我都希望組匹配並只給我maindomain.com
注意 :在投反對票之前,請注意,我既無法使用現有答案,也無法與現有問題匹配。
您可以使用一個簡單的正則表達式僅獲取域名的后2個部分:
/[^.]+\.[^.]$/
它匹配一個非周期字符序列,然后是句點和另一個非周期序列,所有這些都在字符串的末尾。 此正則表達式不能確保此域名出現在“ @”之后。 如果您想制作一個正則表達式也可以做到這一點,則可以使用帶有“ *?”的惰性匹配:
/@.*?([^.]+\.[^.])$/
但是,我認為嘗試立即執行所有操作往往會使make正則表達式更加復雜且難以閱讀。 在此問題中,我希望分兩步執行操作:首先檢查電子郵件中是否包含“ @”。 然后,在“ @”之后得到該部分,並將其傳遞給簡單的正則表達式,該正則表達式將提取域名。
分離事物的優點之一是某些更改更容易。 例如,如果您要確保電子郵件中僅包含一個“ @”,則很容易在單獨的步驟中進行操作,但是在“執行所有操作”正則表達式中很難實現。
您可以使用此正則表達式:
/@(?:[^.\s]+\.)*([^.\s]+\.[^.\s]+)$/gm
將捕獲的組#1用於結果。
@
后跟0或多個非DOT文本實例和一個DOT,即(?:[^.\\s]+\\.)*
。 ([^.\\s]+\\.[^.\\s]+)$
可以匹配並捕獲由DOT
分隔的最后兩個分量。 使用以下maindomain
應始終返回字符串的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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.