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

Stacca picture Stacca · Mar 12, 2015 · Viewed 9.5k times · Source

I am doing a gsub to swap "bad" for "good". Is there a way to use capitalize so it will swap both lower and upper case? Or will I have to write the def twice?

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

Answer

Marek Lipka picture Marek Lipka · Mar 12, 2015

You can pass Regexp instead of String, with i option that indicates that this regexp is case insensitive:

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

note that it will substitute not only 'bad' and 'BAD', but also, for example, 'bAd'. If you want to substitute only all-uppercase or all-lowercase, you can do:

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