2010-08-17 45 views
1

以下正則表達式有什麼問題,它適用於許多在線JavaScript正則表達式測試人員(和RegEx Buddy),但在我的應用程序中不起作用?如何使用正則表達式在全文中查找URL

它旨在用超鏈接替換URL。 Javascript是在一個JavaScript文件中找到的。

var fixed = text.replace(/\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]/ig, "<a href='$&' target='blank'>$&</a>"); 

鉻,例如,抱怨說&無效(一樣IE8)。有沒有辦法逃避&符號(或其他任何錯誤),而不訴諸RegEx對象?

+1

你有任何機會屬性內的代碼?如果是這樣,那麼你需要對它的body進行html編碼(這與代碼本身無關)。 – 2010-08-17 02:01:25

回答

1

這些測試讓你輸入原始形式的正則表達式,但是當你在源代碼中使用它,你必須把它寫在一個字符串形式的文字或(就像這裏的情況一樣)一個正則表達式。 JavaScript爲其正則表達式分隔符使用正斜槓,所以您必須在正則表達式中自由地跳過任何斜槓以避免混淆解釋器。

一旦你逃脫了斜槓,它應該停止抱怨&符號。這很可能是由格式錯誤的正則表達式造成的。

我意識到那個正則表達式,前幾天我用過它;你從RegexBuddy的圖書館得到它,不是嗎?如果你使用過RB的「使用」功能來創建一個JS兼容的正則表達式,它會爲你逃脫斜線。

+0

我其實從正式表達式食譜中得到了它。作者創建了RegexBuddy。 – WiredPrairie 2010-08-17 12:10:45

+0

未轉義/是問題所在。我非常關注錯誤信息,我沒有想過要看看錶達式的其餘部分 - 特別是因爲我從書中拉出來了......)(而且我仍然對UX有些困惑的RegExBuddy,並沒有注意到「使用」標籤)。 – WiredPrairie 2010-08-17 12:14:54

0

這對我的作品在Chrome

var fixed = text.replace(/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/igm, "<a href='$1' target='blank'>$1</a>");