有可能做一个不区分大小写的`gsub`吗?

时间:2015-03-12 11:58:59

标签: ruby regex case-insensitive

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

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

2 个答案:

答案 0 :(得分:37)

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

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

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

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

答案 1 :(得分:0)

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

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

当正则表达式匹配时,将执行该块,并将该块的返回值用作替换。

因此,这会将“ Bad”替换为“ Good”,并将“ bad”替换为其他任何大写字母和小写字母(包括“ bad”但也包括“ BAD”,“ bAD”等),并替换为“ good” '。