Ruby链接为字符串中的url

有一些关于使用正则表达式链接文本的post。 最受欢迎的是这篇文章 。

不过我的规格有点棘手:

describe TextFormatter do def l(input) TextFormatter.gsub_links!(input){|link| "!!#{link}!!"} end it "should detect simple links" do l("http://www.cnn.com").should == "!!http://www.cnn.com!!" end it "should detect multi links" do l("http://www.cnn.com http://boats.com?help.asp").should == "!!http://www.cnn.com!! !!http://boats.com?help.asp!!" end it "should compensate for parans properly" do l("(http://this.is?hello_world)").should == "(!!http://this.is?hello_world!!)" end it "should ignore existing links" do s = " http://sam.com " l(s.dup).should == s end it "should allow parans" do l("http://sam.com.au?(red)").should == "!!http://sam.com.au?(red)!!" end end 

任何想法如何实现毛茸茸的正则表达式:

这是我到目前为止的地方(它未通过2次测试):

  def gsub_links!(input) regex = /https?\:\/\/[\-\w+&@#\/%?=~\(\)\|!:,.;]*[\-\w+&@#\/%=~_\(\)|]/ input.gsub!(regex) { |link| yield link } end 

我可能会错过一些背景,但为什么重新发明轮子? 你在actionpack试过auto_link吗?

 $ gem install actionpack $ irb -f --prompt simple >> require 'action_view' >> include ActionView::Helpers >> auto_link("abc http://google.com xyz") => "abc http://google.com xyz" >> auto_link("abc google xyz") => "abc google xyz" 
Interesting Posts