2017-08-03 121 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