2011-06-05 66 views
2

假設我將推文存儲爲JS變量中的字符串...如何使用JavaScript RegEx從Tweet中提取URL?

如何使用JavaScript RegEx從推文中提取URL?

這應該是比從字符串中提取一個網址要容易得多,這是因爲:

我會認爲任何以http或www開頭,以一個空格(或鳴叫結束)結束是一個URL。

+1

你只需要一個匹配URL的JS正則表達式。有很多關於這個答案的問題。 – 2011-06-05 04:21:04

+0

我環顧四周,但我沒有看到任何好的答案。例如,這些不起作用:http://stackoverflow.com/questions/4043098/extract-url-from-string-with-javascript – edt 2011-06-05 16:19:53

回答

10

這是我用於從Twitter狀態中拉取鏈接的正則表達式之一。

鏈接匹配模式

(?:<\w+.*?>|[^=!:'"/]|^)((?:https?://|www\.)[-\w]+(?:\.[-\w]+)*(?::\d+)?(?:/(?:(?:[~\w\+%-]|(?:[,.;@:][^\s$]))+)?)*(?:\?[\w\+%&=.;:-]+)?(?:\#[\w\-\.]*)?)(?:\p{P}|\s|<|$) 

或者,如果控制狀態如何從Twitter牽強,可以傳遞include_entities參數statuses/show(或支持的任何其他方法,如statuses/user_timeline)讓Twitter爲您打開鏈接,提及和標籤,如下所示:

http://api.twitter.com/1/statuses/show/23918022347456512.json?include_entities=true

在生成的JSON中,請注意實體對象。

"entities":{"urls":[{"expanded_url":null,"indices":[27,53],"url":"http:\/\/tinyurl.com\/38wp7nt"}],"hashtags":[],"user_mentions":[]} 

現在,您可以引用Twitter返回的數據,而不必自己解析它。關於這種方法的最好的事情是你將工作轉移到Twitter上,而且不用擔心你的正則表達式是否與Twitter完全匹配。

0
var stringToCheck = "http://www.something"; 

stringToCheck.match(/^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$/); // returns true if stringToCheck is a URL 

這將檢查兩個或三個字母的TLD和帳戶子域。

+0

我試圖檢查的字符串是Twitter推文。所以,stringToCheck會是這樣的:「檢查真棒http://www.something.com」或「www.something.com太棒了!」 – edt 2011-06-05 05:14:19

+0

stringToCheck.match(/ \ b(([\ w-] +://?| www [。])[^ \ s()<>] +(?:\([\ w \ d] + \) |([^ [:PUNCT:] \ S] | /)))/);如果stringToCheck是一個URL,則返回true – 2011-06-06 00:14:39