是否可以做一个不区分大小写的`gsub`?

问题描述 投票:20回答:2

我正在做一个 gsub 调换 "bad" 对于 "good". 有没有办法使用 capitalize 所以它可以同时交换小写和大写?还是我必须写上 def 两次?

def add_more_ruby(string)
  string.gsub('bad','good').capitalize
end
ruby regex case-insensitive
2个回答
46
投票

你可以通过 Regexp 而不是 String,与 i 选项,表示这个regexp是不区分大小写的。

def add_more_ruby(string)
  string.gsub(/bad/i, 'good')
end

请注意,它不仅会替换 'bad''BAD'但也有,例如: 'bAd'. 如果你想只用全大写或全小写代替,你可以这样做。

string.gsub(/bad|BAD/, 'good')

0
投票

也可以选择使用块形式的 gsub 来处理不同的大写字母。

string.gsub(/bad/i) do |match|
  match == 'Bad' ? 'Good' : 'good'
end

当regexp匹配时,该块会被执行,并使用该块的返回值作为替换。

因此,这将会把'Bad'替换成'Good',把用任何其他大写和小写字母组合写的'bad'替换成'good'(包括'bad',也包括'BAD','bAD'等)。

© www.soinside.com 2019 - 2024. All rights reserved.