簡體   English   中英

RegEx僅匹配來自任何電子郵件地址的最終域名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM