问题
There have been a few posts about linkifying text using a regex. The most popular is this post.
However my spec is a little more tricky:
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 how to implement the hairy Regex:
This is where I am so far (it fails 2 tests):
def gsub_links!(input)
regex = /https?\:\/\/[\-\w+&@#\/%?=~\(\)\|!:,.;]*[\-\w+&@#\/%=~_\(\)|]/
input.gsub!(regex) { |link|
yield link
}
end
回答1:
I might be missing some context, but why re-invent 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"
来源:https://stackoverflow.com/questions/1442143/ruby-linkify-for-urls-in-strings