2016-12-28 72 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" 
相关问题