Ruby:如何将正则表达式拆分为多行?

Igo*_*r P 6 ruby regex ruby-on-rails rubocop

我的 Rails 应用程序中有一个 141 个字符长的正则表达式,但 Rubocop 不喜欢它。

我的正则表达式:

URL_REGEX = /\A(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/[-\w.]+)\z/
Run Code Online (Sandbox Code Playgroud)

此模式检查网址和一级路径,例如 http(s)://example.com/path

  1. 你能安全地在 Ruby 中拆分正则表达式吗?在 Ruby 中拆分正则表达式的一般机制是什么?

  2. 您如何告诉 Rubocop 在正则表达式上放轻松?

非常感谢!

Gac*_*cha 5

你应该尝试这样的事情:

regexp = %r{\A(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+
            ([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/[\w.]+)\z}x

if 'http://example.com/path' =~ regexp
  puts 'matches'
end
Run Code Online (Sandbox Code Playgroud)

最后的“x”是忽略模式中的空格和注释。

检查 ruby​​ 风格指南最后一个例子https://github.com/github/rubocop-github/blob/master/STYLEGUIDE.md#regular-expressions