我想从类似于something@gmail.com
的电子邮件地址中提取域名gmail.com
,并且我想在Javascript中使用该模式来处理文本框的值。
请为上述要求建议一个更优化和更快的 preg 模式。
我想从类似于something@gmail.com
的电子邮件地址中提取域名gmail.com
,并且我想在Javascript中使用该模式来处理文本框的值。
请为上述要求建议一个更优化和更快的 preg 模式。
你可以替换掉@符号及其之前的内容,以获得域名。在JavaScript中:
var email = 'test@gmail.com';
var domain = email.replace(/.*@/, "");
alert(domain);
var email = "something@gmail.com", i = email.indexOf("@");
if (i != -1) {
email = email.substring(i);
}
正则表达式并不是必须的,你也可以这样做 email = email.split("@")[1];
email.lastIndexOf('@')+1
来获取最后一个@
的位置。请参见https://jsfiddle.net/mx6bqytg/1/。 - Maxime Pacary我刚刚遇到了需要实现这个功能的情况,并想出了一个解决方案,它结合了已经提到的大多数技术:
var email = "test@test@gmail.com";
var email_string_array = email.split("@");
var domain_string_location = email_string_array.length -1;
var final_domain = email_string_array[domain_string_location];
如果电子邮件地址中有多个@符号,只需通过“@”拆分电子邮件字符串并计算创建的新数组中有多少个元素,然后从该数字中减去1,并且您可以从数组中取出具有该数字的右侧元素。
这里是 jsfiddle 链接: http://jsfiddle.net/47yqn/
这对我来说成功率达到了100%!
使用简单的字符串分割无法处理像'abc@abc'@example.com
这样的地址,尽管在技术上是有效的。我认为在@
处进行分割并取最后一个元素应该没问题,因为域名中不允许出现@
字符。
或者,由于您要求,可以使用正则表达式:[^@]+$
const email = "something@gmail.com"
const domain = email.includes('@') && email.split("@").pop()
如果电子邮件地址中不包含 @ 符号,则该域将为 false
。
var extract_company_name = function(email){
var temp = email.replace(/.*@/, '').split('.');
return temp[temp.length - 2];
}
extract_company_name(email)
var email = 'test@gmail.com';
var domain = email.replace(/.*@/, "").split('.')[0];
console.log(domain); // gmail
我会尝试
\b.*@([A-Za-z0-9.-]+\.[A-Za-z]{2,4})\b
\b
替换为^
和$
来微调它。
这样就可以匹配任何由A-Z,a-z和0-9字符组成的域名。你可以通过以下方法从以http开头的网址、电子邮件或网站中获取域名,即只返回域名部分。
var str=inputAddress;
var patt1 = "(http://|https://|ftp://|www.|[a-z0-9._%+-]+@)([^/\r\n]+)(/[^\r\n]*)?";
var result = str.match(patt1);
var domain=result===null?str:result[2];
return domain.toString().startsWith("www.")?domain.toString().slice(4):domain;
hello@www.example.com
这样的电子邮件会给出域名 example.com
,但正确的域名应该是 www.example.com
。 - Vlad V