借用dfowler傑出的Jabbr項目,我借用代碼來嵌入用戶帖子中的鏈接內容。該代碼是從here,並使用正則表達式來提取URL進行額外的處理和嵌入。正則表達式匹配URL/URI,除非包含在img標記中
在我的情況下,我嘗試通過一個降價處理器首先運行用戶帖子,然後再嘗試嵌入。降價處理器(MarkdownDeep)將在用戶正確設置降價格式的情況下將任何給定的圖片降價轉換爲有效的HTML img標籤。然而,這很好用,使用嵌入式內容提供程序將使圖像顯示兩次,因爲它從降級轉換中有效地顯示,然後在嵌入後再嵌入。
所以,我相信我的問題的解決方案在於,當找到的URL已經包含在有效的img標籤中時,將正則表達式更改爲不匹配。
爲了便於回答這個正則表達式到目前爲止的是:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'"".,<>?«»「」‘’]))
我想,我想使用負前瞻像this answer排除IMG,但我太可憐了,在正則表達式的語法來實行它自己。
注意:如果它們只出現在文本中,我希望它仍然匹配圖像。所以http://www.example.com/sites/default/files/DellComputer.jpg
將匹配 或在超鏈接<a href='http://www.example.com/sites/default/files/DellComputer.jpg'>
會匹配,但<img src='http://www.example.com/sites/default/files/DellComputer.jpg'>
不會。
感謝您的幫助,我知道你們中有些人擁有專家級的正則表達能力,我永遠無法做到。
圖像是具有特定擴展名的東西,還是您想要二進制檢查? – fotanus 2013-05-03 15:52:37
沒有二進制檢查。無論圖像與否都匹配URL,但如果包含在html img標籤中則排除URL。 – mlutter 2013-05-03 15:55:42
處理並刪除'img'標籤,然後將其餘的網址與網址進行匹配。在一個正則表達式中做太多事情只會讓寫入,調試和維護變得不必要地複雜化。 – nhahtdh 2013-05-03 15:55:54