除了第一个字符外的单词字样

时间:2014-04-10 12:20:50

标签: ruby string

函数.capitalize将字符串的第一个字符设置为 upcase ,并将所有其他字符设置为 downcase

大写字符串中的每个单词

"my Name is MARC".split(" ").map{|word| word.capitalize}.join(" ")
# => "My Name Is Marc"

我需要一个similair函数,我可以 downcase 所有字符,保留第一个字符不变。因此,除了第一个字母保持不变外,每个字都会掉下来。

"my Name is MARC".some_function
# => "my Name is Marc"

3 个答案:

答案 0 :(得分:7)

高级正则表达式:positive lookbehind

"My name is MARC".gsub(/(?<=\w)\w+/) { |s| s.downcase }
#=> "My name is Marc"

更短(由@falsetru建议):

"My name is MARC".gsub /(?<=\w)\w+/, &:downcase
#=> "My name is Marc"

答案 1 :(得分:6)

使用正则表达式(String#gsub):

"My name is MARC".gsub(/\w+/) { |x| x[0] + x[1..-1].downcase }
# => "My name is Marc"

x[0]: To keep the case of the first letter of each word.
x[1..-1].downcase: To change the case (excpet the first letter)

答案 2 :(得分:0)

您可以使用titleize - here但我不知道您的案例中的Marc是否是模型的属性且字符串只在视图中。当你把资本放在Marc上时,有点困惑