Camelize到字符串的某个部分

Cod*_*ive 0 ruby string ruby-on-rails

我有:

s = "like_so__case"
Run Code Online (Sandbox Code Playgroud)

camelize 给出这个:

s.camelize # => "LikeSoCase"
Run Code Online (Sandbox Code Playgroud)

我正在寻找转换为双下划线__来获得:

"LikeSo__case"
Run Code Online (Sandbox Code Playgroud)

我怎样才能只追踪字符串的某个部分?

yza*_*vin 8

最简单的选择是gsub你的字符串的一部分.

'like_so__case'.gsub(/(.*?)(__.*)/) { "#{$1.camelize}#{$2}" }
#=> "LikeSo__case"
Run Code Online (Sandbox Code Playgroud)

UPDATE

更清晰,更快捷的评论方式.

'like_so__case__h'.sub(/(.*?)(?=__)/, &:camelize)
#=> "LikeSo__case__h"
Run Code Online (Sandbox Code Playgroud)

  • 由于您只想替换第一个匹配项,因此应使用`sub`而不是`gsub`.并且你可以使用积极的前瞻来避免全局变量,例如`sub(/(.*?)(?= ___)/,&:camelize)` (2认同)