我想检测并替换用户输入的文本中的url。一个例子胜过千言万语:
Here's a link to stackoverflow.com, so is http://stackoverflow.com.
=>
Here's a link to [stackoverflow.com](http://stackoverflow.com), so is [http://stackoverflow.com](http://stackoverflow.com).
所有我从谷歌找到的是如何检测url并将其更改为<a>
标签。是否有一种方法可以检测url,并用自定义代码块替换它们以生成上面的示例?非常感谢!
棘手的部分是找到一个匹配所有url的regexp。例如,这可能会工作,从http://ryanangilly.com/post/8654404046/grubers-improved-regex-for-matching-urls-written
regexp = /b((?:https?://|wwwd{0,3}[.]|[a-z0-9.-]+[.][a-z]{2,4}/?)(?:[^s()<>]+|(([^s()<>]+|(([^s()<>]+)))*))+(?:(([^s()<>]+|(([^s()<>]+)))*)|[^s`!()[]{};:'".,<>?«»“”‘’]))/i
一旦你得到了你的regexp,然后使用gsub与一个块,例如
text = "Here's a link to stackoverflow.com, so is http://stackoverflow.com."
=> "Here's a link to stackoverflow.com, so is http://stackoverflow.com."
text.gsub(regexp){|url| "FOO#{url}BAR"}
=> "Here's a link to stackoverflow.com, so is FOOhttp://stackoverflow.comBAR."
注意,这对文本中的第一个没有任何作用(它没有协议),因为它是而不是url。如果你希望它也能捡到第一个,那么这对你来说就困难多了。