我想要一个可以从字符串中删除域扩展名的正则表达式,例如该字符串来自文本字段,因此用户可能包含也可能不包含http://www.
var fqdn = "http://www.mydomainname.com";
var name = regex_function(fqdn);
// name === "mydomainname"
答案 0 :(得分:4)
有两种主要方法:with regular expressions和使用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,'');
}
答案 1 :(得分:0)
不是那么优雅,但它在大多数常规情况下都有效 - 似乎:
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;
}
不适用于子域名(以点分隔),但调整很少......