簡體   English   中英

用於從輸入中提取域的正則表達式

[英]Regular expression for extracting domain from an input

我正在嘗試從可以采用以下格式和結構的輸入中提取domain.com . xxdomain.com 2. x.domain.com

一旦我收到用戶的電子郵件,例如:user@xxdomain.com,我就可以通過以下正則表達式刪除電子郵件地址的第一部分: user@/^.+@/

我希望能夠通過使用 2 種格式的正則表達式立即獲取domain.com ,並且在獲取域之前不要多次操作輸入。 我想也許可以計算輸入中的點數,然后做一些邏輯,但對於這個小解決方案來說它看起來很復雜。

謝謝!

這是域名的正則表達式

"[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$"

還應該管理 xxdomain.co.uk

原始模式使用

"(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]"

祝你好運

正則表達式方式:

 let str1 = "x.domain.com"; let str2 = "x.sdfsdf.google.com"; let str3 = "www.subdomain.yahoo.com"; let reg = /[^.]+\\.[^.]+$/gi; console.log(str1.match(reg)); // domain.com console.log(str2.match(reg)); // google.com console.log(str3.match(reg)); //yahoo.com

簡單的javascript:

 function getDomain(str){ let arr = str.split("."); if(arr.length < 2){ console.log("Invalid domain name"); return null; } else{ return `${arr[arr.length-2]}.${arr[arr.length-1]}`; } } let str1 = "x.domain.com"; let str2 = "x.sdfsdf.google.com"; let str3 = "www.subdomain.yahoo.com"; console.log(getDomain(str1)); // domain.com console.log(getDomain(str2)); // google.com console.log(getDomain(str3)); //yahoo.com

不使用RegExp :將電子郵件地址拆分兩次,從上次拆分中切分並加入結果。 加上兩個RegExp想法。 隨你挑。

 const getDomain = address => address.split("@")[1].split(".").slice(-2).join("."); const getDomainRE = address => address.match(/\\.\\w+/g).slice(-2).join("").slice(1); const getDomainRE2 = address => address.match(/(?:(@|\\.)\\w+){2}$/)[0].slice(1); console.log(getDomain("user@xxdomain.com")); console.log(getDomain("user@x.domain.com")); console.log(getDomain("user@abc.xyzdomain.com")); console.log(getDomainRE("user@xxdomain.com")); console.log(getDomainRE("user@x.domain.com")); console.log(getDomainRE("user@abc.xyzdomain.com")); console.log(getDomainRE2("user@xxdomain.com")); console.log(getDomainRE2("user@x.domain.com")); console.log(getDomainRE2("user@abc.xyzdomain.com"));

我知道您沒有特別要求,但您可能還想將國家/地區代碼視為頂級域(例如.au.uk )。

如果需要,您可以通過以下方式實現:

 function getDomainFromEmail(domain) { const domainExpression = /((\\w+)?(\\.\\w+)(\\.(ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bl|bm|bn|bo|bq|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mf|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw))?)$/i; const match = domainExpression.exec(domain); return match ? match[1] : null; } console.log(getDomainFromEmail('email@example.com')); console.log(getDomainFromEmail('email@sub.example.com')); console.log(getDomainFromEmail('email@sub.sub.example.com')); console.log(getDomainFromEmail('email@example.com.au')); console.log(getDomainFromEmail('email@example.co.uk')); console.log(getDomainFromEmail('email@sub.example.co.uk')); console.log(getDomainFromEmail('email@sub.sub.example.co.uk')); console.log(getDomainFromEmail('email@bit.ly')); console.log(getDomainFromEmail('email@domain.other')); console.log(getDomainFromEmail('email@nomatch'));

長表達式(ad|ae|...|zm|zw)是組合成正則表達式的國家代碼列表。

怎么樣

(@).*

輸出的第一組是@,第二組是domain.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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