2015-11-20 65 views
3

使用gsub時,有可能維持案件嗎?String#gsub維護大小寫嗎?

這是一個工作示例,可以做到這一點,而不需要撥打gsub兩次?也許在正則表達式中添加大小寫不敏感的i

'Strings'.gsub(/s/, 'z').gsub(/S/, 'Z') #=> Ztringz 

目標(顯然不工作):

'Strings'.gsub(/s/i, 'z') #=> Ztringz 

回答

1

三種方法使用String#gsub

隨着塊一個簡單的條件表達式

'Strings'.gsub(/s/i) { |str| str=='s' ? 'z' : 'Z' } 
    #=> "Ztringz" 

與塊和ASCII值偏移

offset = 'z'.ord-'s'.ord 
    #=> 7 
'Strings'.gsub(/s/i) { |str| (str.ord + offset).chr } 
    #=> "Ztringz" 

塊可被替換地寫成:

{ ($&.ord + offset).chr } 

對於具有默認值

散列10