2016-07-28 66 views
3

作爲小白匹配所有關鍵字字符串中的正則表達式中需要我從社區的一些支持正則表達式來

讓說我有這個字符串海峽

  1. www.anysite.com你好演示嘗試此鏈接

  2. anysite.com確實演示鏈接

  3. http://www.anysite.com另一個

  4. www.anysite.com

  5. http://anysite.com

考慮1-5的整串海峽這裏

我希望把所有' anysite.com'轉換爲可點擊的html鏈接,我正在使用:

str = str.replace(/((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g, '<a href="$1" target="_blank">$1</a>'); 

此將所有空格分隔單詞開始HTTP/HTTPS/FTP到鏈接作爲

<a href="url" target="_blank">url</a> 

所以,線和線已經正確轉換。我們所有www.anysite.com轉化爲鏈接我再次使用

str = str.replace(/(\b^(http|https|ftp)?(www\.)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, '<a href="https://$1" target="_blank">$1</a>'); 

雖然只有當它在STR的最開始發現轉換成www.anysite.com鏈接。所以它轉換行號但不行號。

請注意,我已經使用^(HTTP | HTTPS | FTP)(WWW)找到所有WWW不 開始與HTTP/HTTPS/FTP,作爲HTTP他們已經被 轉換

此外,行號上的鏈接,它既不是以http或www開頭,而是以.com結尾,正則表達式是如何爲此。

作爲參考,你可以嘗試發佈這整個字符串到你的Facebook時間軸,它將所有五行轉換爲鏈接。檢查快照

enter image description here

+0

可能重複[什麼是一個很好的正則表達式來匹配一個URL?](http://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a- url) – nicael

+0

你可以用google搜索正則表達式來匹配URL,問題就解決了(你知道如何使用replace,對嗎?) – nicael

+0

請校對你的問題標題。 – 2016-07-28 16:50:02

回答

0

^(http|https|ftp)?(www\.)並不意味着 「所有WWW無法啓動與HTTP/HTTPS/FTP」,而是「是一個可選的http/https/ftp隨後www.開頭的字符串。

事實上,^在這個上下文不是否定,而是表示字符串開始的錨。我想你以這種方式使用它是因爲它在字符類中使用時的意義([^...]);它是相當棘手的,因爲它的意義改變取決於它發現的上下文。

你可以刪除它,你應該沒問題,因爲我沒有看到確保字符串不以http/https/ftp開頭的點(你改變了那些發生在之前,應該沒有剩下)。


編輯:我提到的回顧後卻忘了這不是在JS提供...

如果你想使某種否定的,最簡單的方法是使用一個負回顧後:

(?<!http|https|ftp)www\. 

這匹配「www。」只有當它不在http,https和ftp之前。

+0

它說'無效的正則表達式',與http://regexr.com/檢查它說'Lookbehind不支持在JavaScript – Anant

+0

Woops ,對...不只是刪除'^'解決你的問題?因爲替代品不是很好(或者使用多個正則表達式來檢查它是否包含「www ...」,但不包含「http [https | ftp」),或者製作一個可怕的正則表達式,匹配每個5個或更少的「 www ...「不包含http,https或ftp) – Aaron

+0

這就是我正在嘗試但無法做出的,儘管我仍在嘗試 – Anant

3

感謝您的幫助,最後的正則表達式,幫助我的是:

//remove all http:// and https:// 
str = str.replace(/(http|https):\/\//ig, ""); 

//replace all string ending with .com or .in only into link 
str = str.replace(/((www\.)?[[email protected]:%._\+~#=]{2,256}\.(com|in))/ig, '<a href="//$1" target="_blank">$1</a>'); 

我用com和。在我的具體要求,否則在這個http://regexr.com/39i0i的解決方案將工作

雖然sill有問題,它不會將縮短的url完全轉換爲 鏈接。例如http://s.ly/qhdfTyuiOP將鏈接到s.ly

還有什麼建議嗎?