首页 > 解决方案 > 按换行符分割 - 如果没有匹配项,则返回包含原始字符串的数组

问题描述

我最近发现String#split如果找不到匹配项,该方法会返回一个包含原始字符串的单元素数组:

"azerty keyboard".split(/\n/)
=> ["azerty keyboard"] 

"azerty keyboard".split(',')

=> ["azerty keyboard"] 

如果没有找到匹配项,不拆分的解决方案是什么?只需使用:

if "azerty keyboard".match(/\n/)
...# split here
end

还是有更好的方法?

标签: regexruby

解决方案


由于我们正在使用 Ruby,您可以打开String该类并创建一个按您期望的方式工作的新函数:

class String
  def split_if(matches)
    match(matches) ? split(matches) : self
  end
end

然后会返回:

"azerty keyboard".split_if(/\n/)
=> "azerty keyboard"

"azerty keyboard".split_if(' ')
=> ["azerty", "keyboard"]

尽管请记住,仅仅因为我们可以,并不总是意味着我们应该。有些人认为开放课程是一个很大的禁忌。那么你应该这样做吗?这取决于您、您的团队和您的应用程序的需求。


推荐阅读