1

我的 Ruby 模型中有以下方法:

老的:

def to_s
    numbers = self.title.scan(/\d+/) if self.title.scan(/\d+/)
    return numbers.join.insert(0, "#{self.title.chop} ") if numbers

    "#{self.title.titlecase}"
  end

新的:

def to_s
    numbers = self.title.scan(/\d+/)
    return numbers.join.insert(0, "#{self.title.sub(/\d+/, '')} ") if numbers.any?

    self.title.titlecase
  end

Atitle可以是这样的:Level1 或 TrackStar

所以 TrackStar 应该成为 Track Star 而 Level1 应该是 Level 1,这就是为什么我开始扫描数字

我正在尝试像 Level 1 一样显示它。上面的作品,我只是想知道是否有更雄辩的解决方案

4

2 回答 2

4

试试这个:

def to_s
  self.title.split(/(?=[0-9])/, 2).join(" ")
end

第二个参数split是确保像“Level10”这样的标题不会被转换为“Level 1 0”。

编辑- 要在单词之间添加空格,我会使用gsub

def to_s
  self.title.gsub(/([a-z])([A-Z])/, '\1 \2').split(/(?=\d)/, 2).join(" ")
end

请务必在 . 的第二个参数中使用单引号gsub

于 2013-04-03T19:24:04.903 回答
1

这个怎么样:

'Level1'.split(/(\d+)/).join(' ')
#=> "Level 1"
于 2013-04-03T19:24:36.677 回答