我想要一个可以从字符串中删除域扩展名的正则表达式,例如字符串来自文本字段,因此用户可能包含也可能不包含http://www.
var fqdn = "http://www.mydomainname.com";
var name = regex_function(fqdn);
// name === "mydomainname"
我想要一个可以从字符串中删除域扩展名的正则表达式,例如字符串来自文本字段,因此用户可能包含也可能不包含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,'');
}
不是那么优雅,但在大多数情况下它是有效的——它似乎:
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;
}
不适用于子域(由点分隔),但几乎没有调整......