Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby regexp将snake_外壳转换为PascalCasing?_Ruby_Regex_Pascalcasing - Fatal编程技术网

Ruby regexp将snake_外壳转换为PascalCasing?

Ruby regexp将snake_外壳转换为PascalCasing?,ruby,regex,pascalcasing,Ruby,Regex,Pascalcasing,我创建了一个使用以下功能的web框架: def to_class(text) text.capitalize text.gsub(/(_|-)/, '') end 将项目的snake\u cased或hyphen cased目录名转换为PascalCased类名 问题是,该函数只删除了\uu和-,并且没有将下一个字母大写。使用.capitalize或.upcase,有没有一种方法可以实现将您的snake/hyphen\uu/-cased名称转换为正确的PascalCased类名

我创建了一个使用以下功能的web框架:

def to_class(text)
    text.capitalize
    text.gsub(/(_|-)/, '')
end
将项目的
snake\u cased
hyphen cased
目录名转换为
PascalCased
类名


问题是,该函数只删除了
\uu
-
,并且没有将下一个字母大写。使用
.capitalize
.upcase
,有没有一种方法可以实现将您的
snake/hyphen\uu/-cased
名称转换为正确的
PascalCased
类名?

您可能可以将其简化为更小的名称,但是:

txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz

Rails有一个类似的方法,名为。它基本上将由
[a-z0-9]
组成的字符串的每个部分大写,并删除所有其他内容

这将大小写字符串拆分为一个数组;将每个成员大写,并将数组粘回字符串:

gsub(/(?:^|[_-])([a-z])?/) { $1.upcase unless $1.nil? }
def to_pascal_case(str)
  str.split(/-|_/).map(&:capitalize).join
end

p to_pascal_case("snake_cased") #=>"SnakeCased"
由于以下几个原因,您的代码无法工作:

  • 大写方法的结果对象将被丢弃-您 应该执行类似于
    text.capitalize的操作
    文本=文本。大写
  • 但是
    capitalize
    方法只是
    upcase
    s字符串的第一个字母, 不是每个单词的第一个字母

这绝对是一个很好的简短解决方案。谢谢,这是一个很好的解释,也是问题的简短解决方案。