2011-08-22 37 views
0

我從WMD showdown.js文件得到了這個正則表達式模式。檢測超鏈接的正則表達式

/<((https?|ftp|dict):[^'">\s]+)>/gi 

而且代碼:

text = text.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,"<a href=\"$1\">$1</a>"); 

但是,當我設置texthttp://www.google.com,它沒有固定在那裏,它返回的是原始文本值(http://www.google。 COM)。

P.S:我用RegexPal進行了測試,結果不符。

+2

把<>出來,它應該工作這看起來是最好的:'(http | ftp | https):\/\/[\ w \ -_] +(\。[\ w \ -_ ] +)+([\ w \ - \。,@?^ =%&:/〜\ +#] * [\ w \ - \ @ @^^ =%& /〜\ +#])?'From http ://regexlib.com/Search.aspx?k=URL&AspxAutoDetectCookieSupport = 1 – Rob

+1

上次有人回答關於正則表達式和HTML的問題時,這讓他們生氣。 http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

所以你只是想把整個網址,並把它放在一個錨標記?在你的例子中,它應該返回'http://www.google.com'? – Ali

回答

0

只要你知道你的網址爲http://或https://或者任何你可以使用:

/((https?|s?ftp|dict|www)(://)?)[A-Za-z0-9.\-]+)/gi 

表達式匹配,直到它遇到的URL,即不允許一個字符不是A-Za-z\.\-。它不會檢測任何形式的google.com或任何類似於參數或子目錄路徑等域名的內容。如果這是您的要求,您可以簡單地選擇終止終止條件,就像您在上面的正則表達式中那樣。

我知道這似乎毫無意義,但它可能是有用的,如果您希望顯示名稱縮寫而不是整個url的情況下複雜的URL。

+0

在URL中有很多其他字符是有效的,除了空格之外幾乎任何東西都是允許的。 – RobG

+0

忽略國際化域名...不,基本上只有'A-Za-z0-9 \ -'可以在域名中使用 - 不能是前導字符或最後一個字符。 LordCover(提問者)來自敘利亞,所以我認爲他真的應該決定什麼是有效的。無論哪種方式,這個正則表達式僅用於提取不需要開始的域名。 (查看有效字符http://en.wikipedia.org/wiki/Domain_name) – Ali

2

您的代碼正在搜索<>包裹的網址,例如:<http://www.google.com>RegexPal

只是將其更改爲/((https?|ftp|dict):[^'">\s]+)/gi如果你不希望它搜索<>RegexPal

0

你可以使用:

var re = /(http|https|ftp|dict)(:\/\/\S+?)(\.?\s|\.?$)/gi; 

有:

el.innerHTML = el.innerHTML.replace(re, '<a href=\'$1$2\'>$1$2<\/a>$3'); 

也以句子結尾的匹配的URL。

但是,您需要非常小心這種技術,確保元素的內容或多或少爲純文本而不是複雜的標記。正則表達式並不意味着處理或解析HTML,也不擅長處理或解析HTML。