ruby regexp gascalcasingにsnake_casingを回す?
-
12-12-2019 - |
質問
以下の関数を使用するWebフレームワークを作成しました:
def to_class(text)
text.capitalize
text.gsub(/(_|-)/, '')
end
.
Projectのsnake_cased
またはhyphen-cased
のPascalCased
クラス名に表示するディレクトリ名を回す。
問題は、_
と-
のみを削除し、次の文字を大文字にしません。.capitalize
、または.upcase
を使用すると、snake/hyphen_/-cased
の名前を適切なPascalCased
クラス名にする方法がありますか?
解決
これは_ケーシング文字列を配列に分割します。すべてのメンバーを大文字にして、配列を文字列に戻します。
def to_pascal_case(str)
str.split(/-|_/).map(&:capitalize).join
end
p to_pascal_case("snake_cased") #=>"SnakeCased"
.
あなたのコードはいくつかの理由で機能しません:
- 資本化方法の結果として生じるオブジェクトは廃棄されます - あなた
text.capitalize!
またはtext = text.capitalize
のようなものをする必要があります。 - しかし
capitalize
メソッドだけが、文字列の最初の文字をupcase
sです。 すべての単語の最初の文字ではありません。
他のヒント
gsub(/(?:^|[_-])([a-z])?/) { $1.upcase unless $1.nil? }
. Railsには、 camelize と呼ばれる同様の方法があります。これは基本的に[a-z0-9]
からなる文字列のあらゆる部分を大文字にし、他のすべてを削除します。
あなたはおそらくそれを小さなものにゴルフをすることができますが、:
txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz
. 所属していません StackOverflow