7

在“如何从文本中删除 URL? ”中建议使用以下代码:

require 'uri'
#...
schemes_regex = /^(?:#{ URI.scheme_list.keys.join('|') })/i
#...

我试图将其改进为:

schemes_regex = Regexp.union(URI.scheme_list.keys)

但我不知道应该如何指定IGNORECASE选项 ( i)。

4

3 回答 3

4

我不相信可以Regexp.union像这样传递选项参数。您当然可以在联合操作之后指定它们:

require 'uri'

Regexp.new(Regexp.union(URI.scheme_list.keys).source, Regexp::IGNORECASE)
# => /FTP|HTTP|HTTPS|LDAP|LDAPS|MAILTO/i
于 2012-10-02T19:11:33.800 回答
3
schemes_regex = Regexp.union(
  *URI.scheme_list.keys
  .map{|s| Regexp.new(s, Regexp::IGNORECASE)}
)
于 2012-10-02T19:13:57.143 回答
2

与sawa的响应相同,但它正在寻找位于字符串开头的方案:

Regexp.union(*URI.scheme_list.keys.map {|s| /\A#{s}/i })

在此处查看现场演示

于 2012-10-02T19:24:39.630 回答