Ruby regexp à son tour snake_casing à PascalCasing?
-
12-12-2019 - |
Question
J'ai créé un framework web qui utilise la fonction suivante:
def to_class(text)
text.capitalize
text.gsub(/(_|-)/, '')
end
À tour les noms de répertoires, qui sont snake_cased
ou hyphen-cased
en PascalCased
les noms de classe pour votre projet.
Problème, la fonction n'a retiré _
et -
, et ne pas capitaliser la lettre suivante.À l'aide de .capitalize
, ou .upcase
, est-il un moyen de parvenir à faire de votre snake/hyphen_/-cased
les noms en bon PascalCased
les noms de classe?
La solution
Ceci divise l' _tubés chaîne dans un tableau;capitalise tous les membres et colles le tableau en une chaîne de caractères:
def to_pascal_case(str)
str.split(/-|_/).map(&:capitalize).join
end
p to_pascal_case("snake_cased") #=>"SnakeCased"
Votre code ne fonctionne pas pour plusieurs raisons:
- L'objet résultant de la capitaliser méthode est jeté - vous
doit faire quelque chose comme
text.capitalize!
outext = text.capitalize
. - Mais l'
capitalize
méthode de la justeupcase
s la première lettre de la chaîne, pas la première lettre de chaque mot.
Autres conseils
gsub(/(?:^|[_-])([a-z])?/) { $1.upcase unless $1.nil? }
Rails a une méthode similaire appelé camelize.Essentiellement, il capitalise sur chaque partie de la chaîne constituée de [a-z0-9]
et supprime tout le reste.
Vous pouvez probablement de golf vers le bas pour quelque chose de plus petit, mais:
txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz