Ruby regexp将snake_casing转为PascalCasing?
-
12-12-2019 - |
题
我创建了一个使用以下功能的web框架:
def to_class(text)
text.capitalize
text.gsub(/(_|-)/, '')
end
打开目录名称 snake_cased
或 hyphen-cased
进入 PascalCased
项目的类名。
问题是,该功能仅删除 _
和 -
, ,并且不大写下一个字母。使用 .capitalize
, ,或 .upcase
, ,有没有办法实现让你的 snake/hyphen_/-cased
名正言顺 PascalCased
班级名称?
解决方案
这会将_-cased字符串拆分为一个数组;将每个成员大写,并将数组粘回字符串:
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字符串的第一个字母, 不是每个单词的第一个字母。
其他提示
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
不隶属于 StackOverflow