2011-08-29 18 views
0

我要尋找一個JavaScript函數/正則表達式來提取* .COM從URI ......(要在客戶端完成)Javascript來提取* .COM

應該對以下情況下工作:

siphone.com = siphone.com 
qwr.siphone.com = siphone.com 
www.qwr.siphone.com = siphone.com 
qw.rock.siphone.com = siphone.com 
<http://www.qwr.siphone.com> = siphone.com 

非常感謝!

編輯:對不起,我錯過了一個案例:

http://www.qwr.siphone.com/default.htm = siphone.com 

回答

0

你可以分割字符串,然後搜索.com串像這樣

var url = 'music.google.com' 
var parts = url.split('.'); 
for(part in parts) { 
    if(part == 'com') { 
     return true; 
    } 
{ 
1

我想這正則表達式應該爲幾個工作案件:

/[\w]+\.(com|ca|org|net)/ 

我不擅長使用JavaScript,但應該有一個library用於拆分URI,對吧?

根據該鏈接,這裏有一個「嚴」正則表達式:

/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)[email protected])?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/ 

正如你所看到的,你最好只是用「庫」。 :)

+0

@downvoter有什麼可以幫您? –

0

使用正則表達式來做到這一點。通過這種方式修改檢測結果非常簡單。如果使用url.match(/(([^.]+)\.com)[^a-z]/i)[1]代替,您可以確保「.com」沒有任何其他字符。

+0

你不需要在字符類中跳過'點' - 使用'[^。]'而不是'[^ \。]' –

+0

嗯,我不知道。 preg是否一樣?那個地獄的人誰低估了一切?大多數答案都很好?! – andsens

0
uri = "foo.bar.baz.com" 
uri.split(".").slice(-2).join(".") // returns baz.com 

這假設你只想要主機名和tld。它還假定沒有路徑信息。

現在更新了,你還需要處理與路徑的URI,你可以這樣做:

uri.split(".").slice(-2).join(".").split("/")[0] 
1
var myStrings = [ 
    'siphone.com', 
    'qwr.siphone.com', 
    'www.qwr.siphone.com', 
    'qw.rock.siphone.com', 
    '<http://www.qwr.siphone.com>' 
    ]; 

for (var i = 0; i < myStrings.length; i++) { 
    document.write(myStrings[i] + '=' + myStrings[i].match(/[\w]+\.(com)/gi) + '<br><br>'); 
} 

我已經放在給演示串到myStrings陣列。
i - 是遍歷此數組的索引。 下面的行不匹配特技:

myStrings[i].match(/[\w]+\.(com)/gi) 

並返回siphone.com的值。如果你想匹配.net等 - 添加(com | net | other)而不是(com)。

而且你會發現下面的鏈接有用:Regular expressions Cheat Sheet

更新:錯過的情況下工作太%)

1

這應該這樣做。我爲一些不匹配添加了一些情況。

var cases = [ 
    "siphone.com", 
    "qwr.siphone.com", 
    "www.qwr.siphone.com", 
    "qw.rock.siphone.com", 
    "<http://www.qwr.siphone.com>", 
    "hamstar.corm", 
    "cheese.net", 
    "bro.at.me.come", 
    "http://www.qwr.siphone.com/default.htm"]; 

var grabCom = function(str) { 
    var result = str.match("(\\w+\\.com)\\W?|$"); 
    if(result !== null) 
    return result[1]; 
    return null; 
}; 

for(var i = 0; i < cases.length; i++) { 
    console.log(grabCom(cases[i])); 
}