【问题标题】:Why does %r{ around } my Regex break my gsub?为什么 %r{ around } 我的正则表达式会破坏我的 gsub?
【发布时间】:2020-11-17 21:25:03
【问题描述】:

Rubocop 今天下午把我拉了过来,因为我没有将我的正则表达式文字包装在 %r{} 中。但它随后开始破坏我的 gsub。为什么?

path = '/en/something'
# "/en/something"
locale = 'en'
# "en"
path.gsub(/\A\/#{locale}\/?/, '/')
# "/something" <---- Expected
path.gsub(%r{/\A\/#{locale}\/?/}, '/')
# "/en/something" <---- Unexpected

【问题讨论】:

  • 仅供参考 - Rubocop 有一个 auto-correct option 可以为您解决多种违规行为,包括 %r{ ... }

标签: regex ruby gsub


【解决方案1】:

Ruby 允许您以%r 开始您的正则表达式,后跟您选择的分隔符。当您描述的模式包含大量正斜杠字符时,这很有用,因为这些斜杠不需要在该语法中转义。

因此/\A\/#{locale}\/?/%r{/\A\/#{locale}\/?/} 不相等,请改用%r{\A/#{locale}/?}

r = /\A\/#{locale}\/?/

r == %r{/\A\/#{locale}\/?/}
#=> false
r == %r{\A/#{locale}/?}
#=> true

【讨论】:

  • #facepalm -- 我应该意识到的。我也知道 %s 和 %w 等其他包装器,哦!
猜你喜欢
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 2013-06-07
  • 1970-01-01
相关资源
最近更新 更多