2012-01-25 27 views
3

我基本上是编写自己的Markdown解析器。我想检测一个字符串中的URL,并用锚标记包装它,如果它是一个有效的URL。例如:在文本中查找URL并将其包裹在锚定标记中

string = 'here is a link: http://google.com' 
# if string matches regex (which it does) 
# should return: 
'here is a link: <a href="http://google.com">http://google.com</a>' 

# but this would remain unchanged: 
string 'here is a link: google.com' 

我该如何做到这一点?

如果您可以将我指向现有的可用作示例的Ruby markdown解析器中的代码,则可获得额外奖励。

+0

你想要什么协议,允许? 'HTTP://'? '的https://'? 'FTP://'? 'IRC://'? '的telnet://'? – Phrogz

+1

以下是他们如何在Kramdown中执行此操作:

+0

注意:您必须删除链接上面,使其工作。 –

回答

10

一般来说:使用正则表达式发现URL和包裹他们在您的HTML:

urls = %r{(?:https?|ftp|mailto)://\S+}i 
html = str.gsub urls, '<a href="\0">\0</a>' 

注意这个特殊的解决方案会变成这样的文字:

See more at http://www.google.com. 

...到...

See more at <a href="http://www.google.com.">http://www.google.com.</a> 

所以,你可能想玩正则表达式来找出URL应该真正结束的地方。

+0

它真的很酷。谢谢 –

相关问题