Regex从电子邮件中获取域名

I'l*_*ack 15 regex

我正在学习正则表达式,并且无法google从电子邮件地址获取

first.name@google.com
Run Code Online (Sandbox Code Playgroud)

我只是想得到谷歌,而不是google.com

正则表达式:

[^@].+(?=\.)
Run Code Online (Sandbox Code Playgroud)

结果:https://regex101.com/r/wA5eX5/1

从我的理解.它忽略@了之后找到一个字符串,直到.(点)使用(?=\.)

我做错了什么?

das*_*ght 11

[^@]表示"匹配一个符号,它是不是一个@迹象,是不是你在找什么-使用回顾后,(?<=@)@你的(?=\.)前瞻的\.中间提取服务器名称:

(?<=@)[^.]+(?=\.)
Run Code Online (Sandbox Code Playgroud)

中间部分[^.]+表示"一个或多个非点字符".

演示.

  • `(?&lt;=@)[^.]+(?=\.).*` 用于 `@` 之后的所有内容,包括子域 (2认同)
  • 仅 Chrome 支持 Lookbehinds (2认同)

Rah*_*sai 6

更新的答案:
使用捕获组保持简单:)

@(\w+)
Run Code Online (Sandbox Code Playgroud)

通过拆分它说明
( 捕获组提取)
\w代表字字符 [A-Za-z0-9_]
+是一个量词一个或一个以上的occurances\w

关于Regex101的正则表达式解释和演示


Ste*_*hen 5

我使用的解决方案的正则表达式我的任务,但后来发现有些电子邮件并不那么容易:foo@us.industries.comfoobar@tm.valves.net,和foo@ge.test.com

对于来到这里也想要子域(或被它切断)的任何人,这是正则表达式:

(?<=@)[^.]*.[^.]*(?=\.)
Run Code Online (Sandbox Code Playgroud)

  • @DanielChepenko我不确定你想抓住什么,但子和主正在按照我上面提到的方式被抓住。https://regex101.com/r/DUrvDI/1 (2认同)

小智 5

当我正在努力获取电子邮件地址的域名时,没有一个符合我的需要:

  • 不捕获子域
  • 匹配国家/地区顶级域名(例如.com.arco.jp

例如,test@ext.domain.com.mx我需要匹配domain.com.mx

所以我做了这个:

[^.@]*?\.\w{2,}$|[^.@]*?\.com?\.\w{2}$

这是 regex101 的链接来说明正则表达式:https://regex101.com/r/vE8rP9/59

您可以通过添加环视运算符来获取 sumdomain 名称(不带顶级域 ex:.com.com.mx)(但它将在 中匹配两次test@test.com.mx):

[^.@]*?(?=\.\w{2,}$)|[^.@]*?(?=\.com?\.\w{2}$)