Ruby регулярное выражение, чтобы превратить snake_casing в PascalCasing?
Я создал веб-фреймворк, который использует следующую функцию:
def to_class(text)
text.capitalize
text.gsub(/(_|-)/, '')
end
Чтобы превратить имена каталогов, которые snake_cased
или же hyphen-cased
в PascalCased
имена классов для вашего проекта.
Проблема в том, что функция только удалена _
а также -
и не использует заглавную букву следующей буквы. С помощью .capitalize
, или же .upcase
Есть ли способ добиться создания вашего snake/hyphen_/-cased
имена в собственном PascalCased
имена классов?
4 ответа
Это разбивает строку в _ в массив; каждый член использует заглавные буквы и склеивает массив обратно в строку:
def to_pascal_case(str)
str.split(/-|_/).map(&:capitalize).join
end
p to_pascal_case("snake_cased") #=>"SnakeCased"
Ваш код не работает по нескольким причинам:
- Полученный объект метода capitalize отбрасывается - вы должны сделать что-то вроде
text.capitalize!
или жеtext = text.capitalize
, - Но
capitalize
метод простоupcase
s первая буква строки, а не первая буква каждого слова.
В Rails есть похожий метод, называемый camelize. Это в основном заглавные буквы каждой части строки, состоящей из [a-z0-9]
и удаляет все остальное.
Вы, вероятно, можете сыграть в гольф на что-то меньшее, но:
txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz