ruby:使用正则表达式用<a href="http://anything">http://anything</a>替换http://任何内容

时间:2011-07-11 18:41:37

标签: ruby regex

我在这个问题上看到了很多变化,但他们通常会尝试验证网址的“任意”部分,或者为锚文本和链接提供不同的文字。

对于用户的简单博客功能,我需要返回相同文本的应用程序助手,除了找到以http://开头的任何字符串(并以任何空格或字符串结尾结束)并用{替换它{1}}

有关如何使用正则表达式执行此操作的任何提示都将受到赞赏...我想出了点点滴滴(抓住一个以http开头的单词)但无法完成所有工作(无法弄清楚如何使用它使用href周围的引号进入模板,处理测试中的<a href="same_string_here">same_string_here</a>,或将字符串放在://之前的第二位。

3 个答案:

答案 0 :(得分:9)

您可以尝试以下方法:

str = "XYZhttp://abc XYZ"
str.gsub!(/(http:\/\/\S+)/, '<a href="\1">\1</a>')
puts str

会给你

XYZ<a href="http://abc">http://abc</a> XYZ

注意:\S+捕获任何非空格,即http://后必须至少有一个此类字符。它也不会删除http://abc之后的空格。如果需要,可以将\s*附加到paranthesis之外的正则表达式。

答案 1 :(得分:2)

我认为可以从这个答案中提取答案:Turn URLs and @* into links。它比你想要的更多,因为它寻找像Twitter这样的特定链接,但它确实有你的href问题的解决方案。

答案 2 :(得分:0)

您可以使用:

body.gsub(/(?<!"|'|>)https?:\/\/[\S]+/, '<a href="\0">\0</a>').html_safe

这种方法的优点是它会替换文本,而不是html链接,例如:

https://www.example.com
http://www.example.com
<a href="https://www.example.com">https://www.example.com</a

# becomes

<a href="https://www.example.com">https://www.example.com</a>
<a href="https://www.example.com">http://www.example.com</a>
<a href="https://www.example.com">https://www.example.com</a>