2009-12-31 58 views
8

例如,我有以下字符串:匹配的字符串,返回的所有URL在數組中的JavaScript

var string = 'watch this video http://vimeo.com/8122132 and then see this picture http://www.flickr.com/photos/pmorgan/32606683/'; 

我希望能夠找到所有有效的網址,並將它們放置在一個數組,在JavaScript做(和jQuery),所以在這種情況下:

url[0] = http://vimeo.com/8122132 
url[1] = http://www.flickr.com/photos/pmorgan/32606683/ 

現在,我只能匹配一個URL,但我希望匹配所有。這是我有:

geturl = new RegExp("(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))"); 
var url = geturl.exec(string); 
$('#urls').html(url[0]); 

信任我,把網址[1],URL [2]等不工作:(

任何想法

+0

爲什麼只支持'FTP | HTTP | HTTPS |鼠|郵寄地址|新聞| NNTP |遠程登錄| WAIS |文件|普洛斯彼羅|目標|?webcal''[\ W \ - ] +'將匹配例如,你的正則表達式不會匹配'google-search:foobar'。 – 2009-12-31 18:00:26

+0

實際上,我是o只希望能夠匹配urls與oembed的支持,但我發現的模式有所有這些協議,也許我只是讓它(http | https)... – Samin 2010-01-02 12:50:59

回答

16

通行證 「G」在正則表達式

geturl = new RegExp(
      "(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))" 
     ,"g" 
     ); 


string.match(geturl).length 
2 

string.match(geturl) 
http://vimeo.com/8122132, http://www.flickr.com/photos/pmorgan/32606683/ 
相關問題