删除域扩展的Javascript正则表达式
我想要一个可以从字符串中删除域扩展名的正则表达式,例如字符串是从文本字段中删除的,因此用户可能包括也可能不包括删除域扩展的Javascript正则表达式,javascript,Javascript,我想要一个可以从字符串中删除域扩展名的正则表达式,例如字符串是从文本字段中删除的,因此用户可能包括也可能不包括http://www. var fqdn = "http://www.mydomainname.com"; var name = regex_function(fqdn); // name === "mydomainname" 有两种主要方法可以做到这一点:和使用DOM function regex_function(fqdn) { var a = document.cre
http://www.
var fqdn = "http://www.mydomainname.com";
var name = regex_function(fqdn);
// name === "mydomainname"
有两种主要方法可以做到这一点:和使用DOM
function regex_function(fqdn) {
var a = document.createElement('a');
a.href = fqdn;
return a.hostname || undefined;
}
没有可靠的方法可以删除像.com
这样的域扩展,但你为什么要这样做呢
此函数确实删除了一些扩展,但请不要使用此函数,我在这里添加此函数是为了向您展示,要删除这些扩展的一小部分,需要做多少工作和不必要的代码:
function removeExt(str){
var a = document.createElement('a');
a.href = str;
var hostName = a.hostname;
var domainExtensions = [
"gov", "org", "co", "com", "in", "info", "net", "uk", "af", "am", "ar", "au", "as", "az", "be", "bg", "bn", "bo", "bs", "ca", "cs", "cy", "da", "de", "dv", "el", "en", "es", "et", "eu", "fa", "fi", "fo", "fr", "gd", "gl", "gn", "gu", "he", "hi", "hr", "hu", "hy", "id", "is", "it", "jp", "ka", "kk", "km", "kn", "ko", "ks", "la", "lo", "lt", "lv", "mi", "mk", "ml", "mn", "mr", "ms", "mt", "my", "nb", "ne", "nl", "or", "pa", "pl", "pt", "rm", "ro", "ru", "sa", "sb", "sd", "si", "sk", "sl", "so", "sq", "sr", "sv", "sw", "ta", "te", "tg", "th", "tk", "tn", "tr", "ts", "tt", "uk", "ur", "uz", "vi", "xh", "yi", "zh", "zu"
];
var regex = new RegExp("\.?(\."+domainExtensions.join('|')+")+$");
return hostName.replace(regex,'');
}
有两种主要方法可以做到这一点:和使用DOM
function regex_function(fqdn) {
var a = document.createElement('a');
a.href = fqdn;
return a.hostname || undefined;
}
没有可靠的方法可以删除像.com
这样的域扩展,但你为什么要这样做呢
此函数确实删除了一些扩展,但请不要使用此函数,我在这里添加此函数是为了向您展示,要删除这些扩展的一小部分,需要做多少工作和不必要的代码:
function removeExt(str){
var a = document.createElement('a');
a.href = str;
var hostName = a.hostname;
var domainExtensions = [
"gov", "org", "co", "com", "in", "info", "net", "uk", "af", "am", "ar", "au", "as", "az", "be", "bg", "bn", "bo", "bs", "ca", "cs", "cy", "da", "de", "dv", "el", "en", "es", "et", "eu", "fa", "fi", "fo", "fr", "gd", "gl", "gn", "gu", "he", "hi", "hr", "hu", "hy", "id", "is", "it", "jp", "ka", "kk", "km", "kn", "ko", "ks", "la", "lo", "lt", "lv", "mi", "mk", "ml", "mn", "mr", "ms", "mt", "my", "nb", "ne", "nl", "or", "pa", "pl", "pt", "rm", "ro", "ru", "sa", "sb", "sd", "si", "sk", "sl", "so", "sq", "sr", "sv", "sw", "ta", "te", "tg", "th", "tk", "tn", "tr", "ts", "tt", "uk", "ur", "uz", "vi", "xh", "yi", "zh", "zu"
];
var regex = new RegExp("\.?(\."+domainExtensions.join('|')+")+$");
return hostName.replace(regex,'');
}
虽然不那么优雅,但在大多数常规情况下,它仍在发挥作用——似乎:
function strip(fqdn) {
fqdn=fqdn.replace(/http:\/\/www./,'');
var i = fqdn.lastIndexOf('.');
var n=fqdn.substr(i,fqdn.length-1);
fqdn=fqdn.replace(n,'');
dot=fqdn.lastIndexOf('.');
if(dot!=-1) {
var n2=fqdn.substr(dot,fqdn.length-1);
fqdn=fqdn.replace(n2,'');
}
return fqdn;
}
更好的一个:
function strip_dom(fqdn) {
pattern=/\.+[0-9A-Za-z]+\./;
fqdn=fqdn.match(pattern);
fqdn=fqdn.join(fqdn,'');
fqdn=fqdn.replace(/\./g,'');
return fqdn;
}
不适用于子域(用点分隔),但有一些调整…不太优雅,但在大多数常规情况下,它是有效的-似乎:
function strip(fqdn) {
fqdn=fqdn.replace(/http:\/\/www./,'');
var i = fqdn.lastIndexOf('.');
var n=fqdn.substr(i,fqdn.length-1);
fqdn=fqdn.replace(n,'');
dot=fqdn.lastIndexOf('.');
if(dot!=-1) {
var n2=fqdn.substr(dot,fqdn.length-1);
fqdn=fqdn.replace(n2,'');
}
return fqdn;
}
更好的一个:
function strip_dom(fqdn) {
pattern=/\.+[0-9A-Za-z]+\./;
fqdn=fqdn.match(pattern);
fqdn=fqdn.join(fqdn,'');
fqdn=fqdn.replace(/\./g,'');
return fqdn;
}
不适用于子域(用点分隔),但有一些调整…您的示例中的预期输出是什么?@PaulS。他们把它放在底部
name
应该包含“mydomainname”那么something.org.uk
?http://www.example.com
,http://foo.example.com
和http://example.com
可能都有不同的content@Quentin不要忘记example.us
,example.it
,example.de
,等等。您的示例中的预期输出是什么?@PaulS。他们把它放在底部name
应该包含“mydomainname”那么something.org.uk
?http://www.example.com
,http://foo.example.com
和http://example.com
可能都有不同的content@Quentin不要忘记example.us
,example.it
,example.de
,等等,我喜欢这个解决方案!但是,对于混乱的输入,它在Chrome中返回了“newtab”
,在Firefox中返回了当前主机。@marsze当然你需要先验证你的输入,但这不是问题所在。如果没有DOM怎么办?就像nodejs一样。@DanLee@DJDavid98对于仅仅获取域名来说似乎是一个巨大的开销,你不觉得吗?我喜欢这个解决方案!但是,对于混乱的输入,它在Chrome中返回了“newtab”
,在Firefox中返回了当前主机。@marsze当然你需要先验证你的输入,但这不是问题所在。如果没有DOM怎么办?就像nodejs一样。@DanLee@DJDavid98仅仅获得域名就好像是一笔巨大的开销,你不这么认为吗?