在Ruby中将句子转换为Camelcase

时间:2014-01-03 22:49:07

标签: ruby-on-rails ruby

这看起来很容易,但我找不到任何方法,将句子字符串/连字符串转换为camelcase。

Ex:
'this is a sentence' => 'thisIsASentence'
'my-name' => 'myName'

似乎过度使用正则表达式。什么是最好的方式?

5 个答案:

答案 0 :(得分:10)

> s = 'this is a sentence'
 => "this is a sentence"
> s.gsub(/\s(.)/) {|e| $1.upcase}
 => "thisIsASentence"

除了空格之外,您还需要调整该正则表达式以匹配破折号,但这很容易。

非常确定有一种正则表达方式,无需使用块形式,但我没有查找它。

答案 1 :(得分:3)

'this is a sentence'.split.map.with_index { |x,i| i == 0 ? x : x.capitalize  }.join # => "thisIsASentence"

答案 2 :(得分:2)

如果您使用ActiveSupport(例如由于Rails或任何其他依赖项),请查看ActiveSupport::Inflector模块。任何String都可以立即使用这些方法。

'egg_and_hams'.classify # => "EggAndHam"
'posts'.classify        # => "Post"

请记住,Ruby中的标准分隔符是_,而不是-。这意味着您可能需要更换它。

'my-name'.tr('-', '_').classify
 => "MyName" 
'my-name'.tr('-', '_').camelize(:lower)
 => "myName" 

使用ActiveSupport只是委派作业。请记住,在幕后,Ruby中的这些转换很可能使用正则表达式执行。

事实上,在Ruby中,regexp很便宜且很常见。

答案 3 :(得分:2)

使用Rails的ActiveSupport,以下两种情况都适用:

"this is a sentence".underscore.parameterize("_").camelize(:lower)
# => "thisIsASentence"

"my-name".underscore.parameterize("_").camelize(:lower)
# => "myName"

underscore转换任何破折号,parameterize转换空格。

答案 4 :(得分:0)

您正在寻找String#camelize

"test_string".camelize(:lower)           # => "testString"

如果您使用的是除下划线之外的其他分隔符,请使用gsub方法在进行驼峰化之前将其他字符替换为下划线。