2016/03/05
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