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

Is it possible to do a case-insensitive `gsub`?

我正在做 gsub 以将 "bad" 换成 "good"。有没有办法使用 capitalize 来交换大小写?或者我必须写两次 def 吗?

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

您可以传递 Regexp 而不是 String,使用 i 选项表明此正则表达式不区分大小写:

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

请注意,它不仅会替换 'bad''BAD',还会替换 'bAd'。如果你只想替换全大写或全小写,你可以这样做:

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

还可以选择使用 gsub 的块形式来不同地处理不同的大小写:

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

当正则表达式匹配时,块被执行,块的return值被用作替换。

所以这会将 'Bad' 替换为 'Good',而 'bad' 将替换为任何其他大写和小写字母的排列(包括 'bad' 但也包括 'BAD'、'bAD' 等)与 'good'.