2017-08-03 146 views
1

使用URI.extract識別和處理文本內的URL(本例中爲電子郵件)。URI提取包括尾隨方括號]

稍微惱人的特點是,通過方案

urls = URI.extract(text, ['http', 'https', 'cid','mailto']) 

提取時,他們中的一些與尾隨方括號回來,如果他們包括在與周圍括號中的文字。

例如

text = "Here's a link [mailto:[email protected]]" 
urls = URI.extract(text, ['http', 'https', 'cid','mailto']) 
=> ["mailto:[email protected]]"] 

注意到拖尾的右括號會破壞我使用的任何url解析器。

有沒有一種明智的方法來阻止它?

URI.extract的文檔有點令人討厭。

+2

是否有使用url.chomp( 「]」)什麼危險?我敢肯定,這不應該在URL中,但總是有一些邊緣情況下咬你在流浪漢 – Carpela

+0

從技術上來說,括號允許在一個URI中,所以'extract'沒有發生故障。 (事實上​​,Rails使用它們很多,例如'var [] =')。但是,'mailto:'方案在不同的RFC中定義,並且可能不允許它們在那裏。 'URI'可能不那麼複雜。 –

+0

有趣的是,我只傾向於在mailto:和cid:type鏈接中發現錯誤。也許這可以解釋它。 – Carpela

回答

1

也許我錯過了一些東西,但非常簡單的文字替換可以幫助嗎?如果您熟悉UNIX tr工具,這裏還有String#tr爲Ruby:

urls.map { |s| s.tr('[]', '') } 
=> ["mailto:[email protected]"] 
+0

我想過使用chomp做這個。 我認爲,我擔心的可能是我們只想刪除一個不匹配的方括號。 – Carpela

+0

真的,在這種情況下'urls.map {| s | s.chomp(']')}'就足夠了。 – EdvardM

+1

雖然如果括號匹配,那仍然會刪除尾括號。讓我感到不自在http://somesite.com/file[1] – Carpela