Ruby 正则表达式转换大写单词并保留标题化单词

Ruby regex to convert uppercased words and keep titleized ones

给定的字符串"Lorem IPSUM dolor Sit amet"。 "Lorem" 和 "Sit" 中的大写字母应保留,大写字母如 "IPSUM" 应转换为 "Ipsum"

如何使用 gsub 从给定的字符串生成 "Lorem Ipsum dolor Sit amet"? 不工作的例子:s.gsub(/[[:upper:]]/){$&.downcase}

您可以将 capitalize/\b[[:upper:]]{2,}\b/ 正则表达式一起使用:

s.gsub(/\b[[:upper:]]{2,}\b/){$&.capitalize}
# => Lorem Ipsum dolor Sit amet

参见online Ruby demo

请注意,\b[[:upper:]]{2,}\b 模式将匹配仅包含 2 个或更多大写字母的整个单词(因为 \b 是单词边界)(似乎不需要匹配像 [=15 这样的单词=] 已经可以了)。