繁体   English   中英

用正则表达式和捕获替换

[英]Replacement with regular expression and capture

以下方法应该将"snake_case"转换为"CamelCase"

def zebulansNightmare(string)
  string.gsub(/_(.)/){$1.upcase}
end

使用字符串"camel_case" ,我希望gsub(/_(.)/)_之后匹配c 我知道$1是第一个匹配的字母:大写字母。 但是它的工作方式就像用大写字母替换_一样。 为什么_消失了?

没错, $1是捕获的值,但是, gsub将字母与_匹配,然后替换了整个匹配项。 您需要将_重新插入结果:

"camel_case".gsub(/_(.)/){"_#{$1.upcase}"}

IDEONE演示

顺便说一句,如果您只打算匹配_后跟一个字母 (以免浪费时间和资源来尝试将非字母转换为大写字母),则可以使用以下正则表达式:

/_(\p{Ll})/

其中\\p{Ll}是任何小写的Unicode字母。

def zebulans_nightmare(string)
  string.gsub(/\B_[a-z0-9]/) { |s| s[1].upcase }
end

zebulans_nightmare("case_of_snakes")
  #=> "caseOfSnakes" 
zebulans_nightmare("case_of_3_snakes")
  #=> "caseOf3Snakes" 
zebulans_nightmare("_case_of_3_snakes")
  #=> "_caseOf3Snakes" 

\\B 匹配非单词边界

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM