2016-12-28 71 views
0

我有一個像下面這樣的符號。每當符號包含「 - 」連字符標記時,我想刪除它並提取後續字母。 我能做到這一點,像這樣:用下一個大寫字母替換字母中的連字符

sym = :'new-york' 
str = sym.to_s.capitalize 
/-(.)/.match(str)  
str = str.gsub(/-(.)/,$1.capitalize)  
=> "NewYork" 

這需要四條線。有沒有更優雅的方式來創建CamelCase(上面的CamelCase例如NewYork,NewJersey,BucksCounty)從Ruby中的縮寫詞?

+1

你的問題建議 「NEWYORK」 是要返回,但你看 「紐約」。 –

+0

@CarySwoveland我現在提到camelcase單詞 – Donato

+1

_Sidenote:_'str.gsub(/-(.)/,$ 1.capitalize)'不會按預期工作。試試'santiago-de-chile'。它只適用於你的例子,因爲只有連字符。 – mudasobwa

回答

0
sym.to_s.gsub(/(-|\A)./) { $&[-1].upcase } 

sym.to_s.gsub(/(-|\A)./) { |m| m[-1].upcase } 
+0

是\和[A-Z]一樣嗎? – Donato

+0

完全沒有。 '\ A'是一個字符串開始匹配器。我用它來避免必須明確地使字符串大寫以使第一個字母出現。 – mudasobwa

4

這裏有一種方法:

sym.to_s.split('-').map(&:capitalize).join #=> "NewYork" 
0
r =/
    ([[:alpha:]]+) # match 1 or more letters in capture group 1 
    -    # match a hyphen 
    ([[:alpha:]]+) # match 1 or more letters in capture group 2 
    /x    # free-spacing regex definition mode 

sym = :'new-york' 
sym.to_s.sub(r) { $1.capitalize + $2.capitalize } 
    #=> "NewYork" 
相關問題