检测和替换文本中的url



我想检测并替换用户输入的文本中的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。如果你希望它也能捡到第一个,那么这对你来说就困难多了。

相关内容

  • 没有找到相关文章

最新更新