这看起来很容易,但我找不到任何方法,将句子字符串/连字符串转换为camelcase。
Ex:
'this is a sentence' => 'thisIsASentence'
'my-name' => 'myName'
似乎过度使用正则表达式。什么是最好的方式?
答案 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
方法在进行驼峰化之前将其他字符替换为下划线。