Ruby:Titleize:如何忽略较小的单词,如'和','the','或等

use*_*064 8 ruby string

def titleize(string)
  string.split(" ").map {|word| word.capitalize}.join(" ")
end
Run Code Online (Sandbox Code Playgroud)

这标题化每一个单词,但我如何捕获某些我不想大写的单词呢?

即)杰克和吉尔

请不要使用正则表达式.

更新:

我无法使这段代码工作:我得到它打印所有大写的单词数组,但不是没有下面的列表.

words_no_cap = ["and", "or", "the", "over", "to", "the", "a", "but"]

def titleize(string)
cap_word = string.split(" ").map {|word| word.capitalize}

cap_word.include?(words_no_cap)

end
Run Code Online (Sandbox Code Playgroud)

cod*_*mev 8

您可能想要为Rails提供的现有titleize函数创建扩展.

为此,只需在初始化程序中包含以下文件即可!动态提供异常或者可选地修改我的示例以将默认值添加到初始化程序中.

我意识到你不想使用Regex,但是嘿,实际的rails功能使用了Regex,所以你可以保持同步.

放入此文件Rails.root/lib/string_extension.rb并将其加载到初始化程序中; 或者只是把它扔进初始化器本身.

更新:由于@ svoop建议添加结束词边界,修改了REGEX.

# encoding: utf-8
class String
  def titleize(options = {})
    exclusions = options[:exclude]

    return ActiveSupport::Inflector.titleize(self) unless exclusions.present?
    self.underscore.humanize.gsub(/\b(?<!['’`])(?!(#{exclusions.join('|')})\b)[a-z]/) { $&.capitalize }
  end
end
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您不想将 and 或 the 大写,只需执行以下操作:

def titleize(string)
  nocaps = "and"
  string.split(" ").map { |word| nocaps.include?(word) ? word : word.capitalize }.join(" ")
end
Run Code Online (Sandbox Code Playgroud)


Hun*_*len 0

这非常简单,只需在调用时添加一个条件captalize

$nocaps = ['Jack', 'Jill']

def titleize(string)
  string.split(" ").map {|word| word.capitalize unless $nocaps.include?(word)}.join(" ")
end
Run Code Online (Sandbox Code Playgroud)

全局变量是为本示例设计的,它可能是您实际应用程序中的实例变量。