Ruby reference URLs in strings

There have been some reports of linking text using a regular expression. The most popular is this post .

However, my specification is a bit more complicated:

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 = "<A HREF='http://sam.com'> http://sam.com </A>" 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 

Any ideas on how to implement a hairy Regex:

Here I am still (it did not pass 2 tests):

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

I may be missing some context, but why reinvent the wheel? Have you tried auto_link in actionpack ?

 $ gem install actionpack $ irb -f --prompt simple >> require 'action_view' >> include ActionView::Helpers >> auto_link("abc http://google.com xyz") => "abc <a href=\"http://google.com\">http://google.com</a> xyz" >> auto_link("abc <a href='http://google.com'>google</a> xyz") => "abc <a href='http://google.com'>google</a> xyz" 
+13
source share

All Articles