为什么 %r{ around } 我的正则表达式会破坏我的 gsub?
Why does %r{ around } my Regex break my gsub?
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
Ruby 允许您以 %r
开始正则表达式,后跟您选择的分隔符。当您描述的模式包含大量正斜杠字符时,这很有用,因为在该语法中不需要转义这些斜杠。
因此/\A\/#{locale}\/?/
和%r{/\A\/#{locale}\/?/}
不相等,用%r{\A/#{locale}/?}
代替。
r = /\A\/#{locale}\/?/
r == %r{/\A\/#{locale}\/?/}
#=> false
r == %r{\A/#{locale}/?}
#=> true
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
Ruby 允许您以 %r
开始正则表达式,后跟您选择的分隔符。当您描述的模式包含大量正斜杠字符时,这很有用,因为在该语法中不需要转义这些斜杠。
因此/\A\/#{locale}\/?/
和%r{/\A\/#{locale}\/?/}
不相等,用%r{\A/#{locale}/?}
代替。
r = /\A\/#{locale}\/?/
r == %r{/\A\/#{locale}\/?/}
#=> false
r == %r{\A/#{locale}/?}
#=> true