Ruby:Titleize:如何忽略较小的词,如 'and' 、 'the' 、 'or 等

标签 ruby string

def titleize(string)
  string.split(" ").map {|word| word.capitalize}.join(" ")
end

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

即) jack 和吉尔

请不要使用正则表达式。

更新:

我在使这段代码工作时遇到了问题:我让它打印了一个全部大写的单词数组,但并非没有下面的列表。

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

最佳答案

您可能想为 existing titleize 创建一个扩展Rails 提供的功能。

为此,只需将以下文件包含在初始化程序中,然后就可以了!即时提供异常或有选择地修改我的示例以将默认值添加到初始化程序中。

我知道您不想使用 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

关于Ruby:Titleize:如何忽略较小的词,如 'and' 、 'the' 、 'or 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15078964/

相关文章:

ruby - Ruby/Rake 中的递归模式文件删除

c# - 在 C# 多行逐字字符串中转义 string.Format 的参数

java - 如何访问 Java 中每个循环的下一个元素?

c++ - clang 编译器挂起 -std=c++17 -O3

电影院定时显示程序

ruby - 如何测试 RSpec 自定义匹配器

ruby-on-rails - Elasticsearch SocketError (getaddrinfo : Name or service not known)

python - 如何从不同的列表中选出包含两个关键字的字符串?

ruby-on-rails - Rails select_tag 不会访问 belongs_to 关系

Ruby 将 gsub 与正则表达式结合使用