def convert(str)
str.gsub(/\p{Ll}?\p{Lu}/) {|s| (s.size == 1 ? "" : "#{s[0]}_") + "#{s[-1].downcase}"}
end
convert("JobTask") #=> "job_task"
convert("EmployTask") #=> "employ_task"
convert("PostTask") #=> "post_task"
/\p{Ll}/
和
/\p{Lu}/
分别匹配小写和大写字母。参见[regexp]。(
http://ruby-doc.org/core-2.4.0/Regexp.html(search
对于
"\p{Lu}"
)。
可以读取正则表达式,“可选地匹配小写字母和(必需的)大写字母。”如果只匹配一个字符(字符串的第一个字母),
s[-1]
与
s
.
用于
str = "JobTask"
块转换
"J"
到
"j"
和
"T"
到
"_t"
以下内容:
一个懒惰的选择是:
def convert(str)
str.gsub(/\p{Lu}/) { |s| "_#{s.downcase}" }[1..-1]
end
在这里
"JobTask".gsub(/\p{Lu}/) { |s| "_#{s.downcase}" }
# => "_job_task"
[1..-1]
返回不带前导下划线的字符串。