【问题标题】:Ruby regexp to turn snake_casing to PascalCasing?Ruby正则表达式将snake_casing转换为PascalCasing?
【发布时间】:2012-05-20 21:54:27
【问题描述】:

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

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

snake_casedhyphen-cased 的目录名称转换为项目的PascalCased 类名称。

问题是,该函数只删除了_-,并且没有大写下一个字母。使用.capitalize.upcase,有没有办法将您的snake/hyphen_/-cased 名称变成正确的PascalCased 类名称?

【问题讨论】:

    标签: ruby regex pascalcasing


    【解决方案1】:
    gsub(/(?:^|[_-])([a-z])?/) { $1.upcase unless $1.nil? }
    

    【讨论】:

    • 这绝对是一个简短而简单的解决方案。
    【解决方案2】:

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

    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方法只是upcases字符串的第一个字母, 不是每个单词的第一个字母。

    【讨论】:

    • 谢谢,这是一个很好的解释,也是问题的简短解决方案。
    【解决方案3】:

    Rails 有一个类似的方法,称为camelize。它基本上将包含[a-z0-9] 的字符串的每个部分都大写,并删除其他所有部分。

    【讨论】:

      【解决方案4】:

      您可能可以将其缩小到更小的尺寸,但是:

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

      【讨论】:

        猜你喜欢
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 2012-12-04
        • 2012-01-28
        • 2019-05-13
        • 1970-01-01
        • 2011-10-02
        • 2016-04-02
        相关资源
        最近更新 更多