【问题标题】:Detect and replace URLs in text检测和替换文本中的 URL
【发布时间】:2015-05-20 08:38:04
【问题描述】:

我想检测和替换用户输入的文本中的 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).

我从 Google 中找到的只是如何检测 URL 并将它们更改为 <a> 标签。有没有一种方法可以检测 URL,并用自定义代码块替换它们以生成如上例所示的内容?非常感谢!

【问题讨论】:

    标签: ruby-on-rails autolink


    【解决方案1】:

    其中棘手的部分是找到一个匹配所有 url 的正则表达式。例如,这可能有效,来自http://ryanangilly.com/post/8654404046/grubers-improved-regex-for-matching-urls-written

    regexp = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/?)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s\`!()\[\]{};:\'\".,<>?«»“”‘’]))/i
    

    一旦你得到你的正则表达式,然后使用 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。如果您希望它也能捡起第一个,那么这对您来说将更加困难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多