如何使用Regexp.union指定Regexp选项

ste*_*lag 7 ruby regex syntax

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

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

我试图将其改进为:

schemes_regex = Regexp.union(URI.scheme_list.keys)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚应该如何指定IGNORECASEoption(i).

pje*_*pje 4

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

require 'uri'

Regexp.new(Regexp.union(URI.scheme_list.keys).source, Regexp::IGNORECASE)
# => /FTP|HTTP|HTTPS|LDAP|LDAPS|MAILTO/i
Run Code Online (Sandbox Code Playgroud)

  • 我以前用过这个,但就我而言,它会导致一些代码味道,因为我们创建一个 Regexp 对象,然后将其转换为其源字符串,然后将其重新编译为另一个 Regexp 对象。这就是为什么我从OP的参考答案中选择了一个简单的“join('|')”。 (2认同)