如何编写覆盖三类特殊场景的JS正则以从邮箱地址提取域名
邮箱域名提取正则适配方案
适配规则说明
需要覆盖三类边界场景:
- 不保留子域名,例如输入
hello@sub.domain.com返回domain.com - 适配双点域名后缀,例如输入
hello@domain.co.uk返回domain.co.uk - 支持域名部分包含@符号的特殊场景,例如输入
hello@dom@in.com返回dom@in.com
最终可直接使用的正则表达式
/(?<=@).*?(?:[^.]+\.)?([^.]+\.(?:\w{2,3}\.\w{2}|\w{2,}))$/i
末尾的
i修饰符表示忽略大小写,适配域名大小写混合的情况
不同环境使用说明
- 支持正向零宽断言的语言(如Python、Java、ES2018+版本的JS)可直接匹配,取第一个捕获组的内容即可
- 不支持正向断言的环境,可去掉开头的
(?<=)部分,使用/@.*?(?:[^.]+\.)?([^.]+\.(?:\w{2,3}\.\w{2}|\w{2,}))$/i,同样取第一个捕获组内容
场景验证结果
- 输入
hello@domain.com→ 输出domain.com,符合要求 - 输入
hello@sub.domain.com→ 输出domain.com,自动剔除子域名 - 输入
hello@domain.co.uk→ 输出domain.co.uk,适配双后缀场景 - 输入
hello@dom@in.com→ 输出dom@in.com,兼容域名含@的特殊情况
内容的提问来源于stack exchange,提问作者nsayer
相关产品推荐
相关产品推荐

