Rubyの正規表現でそれぞれのケースへの変換
今日は正規表現に苦しんだので練習しました。
snake_case、camel_Case、Pascal_Caseのそれぞれへの変換です。
capitalizeなくても書けるけど一応。
m[0].upcase + m[1..-1]
はちょっと汚いですしね。
Rubular使えばテストケースが期待通りのマッチになるまで簡単に
トライ&エラーが出来ていいです。
class String def snake_to_camel self.gsub(/\b[a-z][a-z\d]*[a-z_\d]*\b/) do |match| match.gsub(/_[a-z\d]/) { |m| m[1..-1].capitalize} end end def snake_to_pascal self.gsub(/\b[a-z][a-z\d]*[a-z_\d]*\b/) do |match| match.gsub(/[a-z][a-z\d]*/) { |m| m.capitalize } end end def camel_to_snake self.gsub(/\b[a-z]+[A-Z][a-z\d]+\b/) do |match| match.gsub(/[A-Z][a-z\d]+/) { |m| "_" + m.downcase } end end def camel_to_pascal self.gsub(/\b[a-z]+[A-Z][a-z\d]+\b/) do |match| match.capitalize end end def pascal_to_snake self.gsub(/\b[A-Z][a-z\d]*([A-Z][a-z\d]+)*\b/) do |match| match.gsub(/[A-Z][a-z\d]*/) { |m| "_" + m }.downcase[1..-1] end end def pascal_to_camel self.gsub(/\b[A-Z][a-z\d]+([A-Z][a-z\d]+)*\b/) do |match| match.gsub(/\b[A-Z][a-z\d]*/) { |m| m.downcase } end end end