2013-06-17 3 views
2

Я бы хотел, чтобы регулярное выражение удаляло расширение домена из строки, например. Строка из текстового поля, так что пользователь может включать или не включать http://www.Регулярное выражение Javascript для удаления расширения домена

var fqdn = "http://www.mydomainname.com"; 

var name = regex_function(fqdn); 

// name === "mydomainname" 
+0

Что ожидаемый выход в вашем примере? –

+0

@PaulS. Они у него внизу. 'name' должно содержать« mydomainname » – Ian

+4

Что относительно' something.org.uk'? – SLaks

ответ

4

Есть 2 основных способа сделать это: 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,''); 
} 
+0

Мне нравится это решение! Однако для беспорядочного ввода он вернул «newtab» в Chrome и текущий хост в Firefox. – marsze

+0

@marsze Конечно, сначала вам нужно подтвердить свой ввод, но здесь не вопрос. – SeinopSys

+0

А что, если бы не было DOM? Подобно nodejs. –

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; 


} 

Не работает для субдоменов (разделенные точкой), но с небольшими изменениями ...

+0

Не очень элегантно! Весь этот код может быть заменен одним RegEx ... – marsze

+0

@marsze, вы правы, см. Выше. Лучше? :) – sinisake

Смежные вопросы