Ruby Regexp per trasformare Snake_casing a Pascalcasing?
-
12-12-2019 - |
Domanda
Ho creato un framework Web che utilizza la seguente funzione:
def to_class(text)
text.capitalize
text.gsub(/(_|-)/, '')
end
.
Per attivare i nomi delle directory generatori snake_cased
o hyphen-cased
in nomi di classe PascalCased
per il tuo progetto.
Problema è, la funzione rimossa solo _
e -
e non capitalizza la lettera successiva.Usando .capitalize
o .upcase
, c'è un modo per ottenere i nomi di snake/hyphen_/-cased
nei nomi di classe PascalCased
adeguati?
Soluzione
questo divide la stringa _-asiatica in un array;Capitalizza ogni membro e colle ritorna l'array in una stringa:
def to_pascal_case(str)
str.split(/-|_/).map(&:capitalize).join
end
p to_pascal_case("snake_cased") #=>"SnakeCased"
.
Il tuo codice non funziona per diversi motivi:
- .
- L'oggetto risultante del metodo capitalizza è scartato - tu
dovrebbe fare qualcosa come
text.capitalize!
otext = text.capitalize
. - Ma il metodo
capitalize
soloupcase
s la prima lettera della stringa, non la prima lettera di ogni parola.
Altri suggerimenti
gsub(/(?:^|[_-])([a-z])?/) { $1.upcase unless $1.nil? }
. Rails ha un metodo simile chiamato camelize .Fondamentalmente capitalizza ogni parte della stringa costituita da [a-z0-9]
e rimuove tutto il resto.
Probabilmente puoi giocare a giocare a qualcosa di più piccolo, ma:
txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz
.