正規表現
正規表現でなんだかうまくいかないです。
def word_capitalize(str) str.gsub!(/[^\-]+/) do |matched| matched.capitalize! end return str end p word_capitalize("in-reply-to") #=> "In-Reply-To" p word_capitalize("X-MAILER") #=> "-Mailer"
アルファベットとハイフンからなる文字列を与えると、ハイフンで区切られた部分をcapitalizeするメソッドの定義なんですが2つ目の方はうまくいかないです。
なんでかなって思ってたんですが、色んな文字列で試してたら原因がわかりました。
原因は、String#capitalize!が大文字と小文字の変換ができなかったら、nilを返すからでした。
すっかり忘れてました。
ということで、それを踏まえて書き直しです。
def word_capitalize(str) str.gsub!(/[^\-]+/) do |matched| matched.capitalize end return str end p word_capitalize("in-reply-to") #=> "In-Reply-To" p word_capitalize("X-MAILER") #=> "X-Mailer"
書きなおしといっても、capitalize!をcapitalizeに変えただけです。
破壊的なメソッドにしないと書き換えてくれないように思えて、
capitalize!にしてましたが、capitalizeでもちゃんと書き換えてくれますね。
破壊的なメソッドはnilを返したりするときは、こういうことになるので、
破壊的なメソッドの扱いには気をつけないとなって思いました。