2013-02-11 60 views
3

我有一個函數,使用正則表達式返回給定url的根域。Javascript簡單的正則表達式來尋找根域

http://jsfiddle.net/hSpsT/

function cleanUp(url) { 
    url = url.replace(new RegExp(/^\s+/),""); // START 
    url = url.replace(new RegExp(/\s+$/),""); // END 

    // IF FOUND, CONVERT BACK SLASHES TO FORWARD SLASHES 
    url = url.replace(new RegExp(/\\/g),"/"); 

    // IF THERE, REMOVES 'http://', 'https://' or 'ftp://' FROM THE START 
    url = url.replace(new RegExp(/^http\:\/\/|^https\:\/\/|^ftp\:\/\//i),""); 

    // IF THERE, REMOVES 'www.' FROM THE START OF THE STRING 
    url = url.replace(new RegExp(/^www\./i),""); 
    //remove slash from end 
    url = url.replace(new RegExp(/\/$/i),"");  
    return url; 
} 

,但它使用正則表達式的多,我們所擔心的性能。是否有更好的方法來做同樣的一行正則表達式?

注意:

document.location.host似乎不工作在我的情況。

回答

5

Extract hostname name from string

嘗試:

function cleanUp(url) { 
    var url = $.trim(url); 
    if(url.search(/^https?\:\/\//) != -1) 
     url = url.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i, ""); 
    else 
     url = url.match(/^([^\/?#]+)(?:[\/?#]|$)/i, ""); 
    return url[1]; 
} 

alert(cleanUp(' http://www.google.com/about.html')); 
alert(cleanUp(' www.google.com/about.html')); 
+0

謝謝,看起來不錯,我會徹底測試並回復。 – Selvam 2013-02-11 11:14:48

+0

我已將它更新爲www.google.com,http://jsfiddle.net/svjTC/1/,在這種情況下可能會失敗,我們可以擴展它嗎? – Selvam 2013-02-12 05:07:16

+1

@Selvam試試這個:http://jsfiddle.net/mwHHH/ – geniuscarrier 2013-02-12 19:16:53

1

試試這個:

http://jsfiddle.net/picklespy/gb34u/1/

它適用於所有現代瀏覽器,甚至在IE 5.5+。

var url = document.createElement('a'); 
url.href = 'http://maps.test.google.com'; 
var host = url.hostname; 

host = host.split('.'); 

var domain = host.pop(); 
domain = host.pop() + '.' + domain; 

alert('Root is: ' + domain) 
+2

謝謝,但可能會失敗 'http://google.co.in'? – Selvam 2013-02-11 11:13:08