2012-05-20 33 views
3

我創建一個使用以下功能的網絡架構:Ruby正則表達式將snake_casing轉換爲PascalCasing?

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

要打開那些snake_casedhyphen-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" 

您的代碼不會有幾個原因的工作:

  • 所導致的利用方法的對象被丟棄 - 你 應該這樣做text.capitalize!text = text.capitalize
  • capitalize方法只是upcase s字符串的第一個字母, 不是每個單詞的第一個字母。
+0

謝謝,這是一個很好的解釋,並解決了問題。 – beakr

1

你可能高爾夫球下來的東西小,但是:

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

Rails有一個名爲camelize類似的方法。它基本上利用了由[a-z0-9]組成的字符串的每個部分,並刪除了其他所有內容。

+0

camelize不會處理'-' – x1a4

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

這絕對是一個很好的簡短的解決方案。 –

+0

當然一個有趣的方法,謝謝。 – beakr

相關問題