我在这个问题上看到了很多变化,但他们通常会尝试验证网址的“任意”部分,或者为锚文本和链接提供不同的文字。
对于用户的简单博客功能,我需要返回相同文本的应用程序助手,除了找到以http://
开头的任何字符串(并以任何空格或字符串结尾结束)并用{替换它{1}}
有关如何使用正则表达式执行此操作的任何提示都将受到赞赏...我想出了点点滴滴(抓住一个以http开头的单词)但无法完成所有工作(无法弄清楚如何使用它使用href周围的引号进入模板,处理测试中的<a href="same_string_here">same_string_here</a>
,或将字符串放在://
之前的第二位。
答案 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>