Регулярное выражение Ruby для преобразования Snake_casing в PascalCasing?

StackOverflow https://stackoverflow.com//questions/10677546

  •  12-12-2019
  •  | 
  •  

Вопрос

Я создал веб-фреймворк, который использует следующую функцию:

def to_class(text)
    text.capitalize
    text.gsub(/(_|-)/, '')
end

Чтобы превратить имена каталогов, которые 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 метод просто upcaseS первая буква строки, а не первая буква каждого слова.

Другие советы

gsub(/(?:^|[_-])([a-z])?/) { $1.upcase unless $1.nil? }

В Rails есть аналогичный метод под названием верблюдствовать.По сути, он капитализирует каждую часть строки, состоящей из [a-z0-9] и удаляет все остальное.

Вероятно, вы можете уменьшить его до чего-то меньшего, но:

txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top