[英]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}"}
顺便说一句,如果您只打算匹配_
后跟一个字母 (以免浪费时间和资源来尝试将非字母转换为大写字母),则可以使用以下正则表达式:
/_(\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.