Подтвердить что ты не робот

Проверьте, содержит ли строка одну из нескольких подстрок

У меня длинная строка-переменная и вы хотите узнать, содержит ли она одну из двух подстрок.

например.

haystack = 'this one is pretty long'
needle1 = 'whatever'
needle2 = 'pretty'

Теперь мне понадобится такая дизъюнкция, которая не работает в Ruby:

if haystack.include? needle1 || haystack.include? needle2
    puts "needle found within haystack"
end
4b9b3361

Ответ 1

Попробуйте использовать parens в выражении:

 haystack.include?(needle1) || haystack.include?(needle2)

Ответ 2

[needle1, needle2].any? { |needle| haystack.include? needle }

Ответ 3

(haystack.split & [needle1, needle2]).any?

Использование запятой в качестве разделителя: split(',')

Ответ 4

Если Ruby 2.4, вы можете сделать регулярное выражение, используя | (или же):

if haystack.match? /whatever|pretty|something/
  …
end

Или, если ваши строки находятся в массиве:

if haystack.match? Regex.union(strings)
  …
end

(Для Ruby <2.4 используйте .match без знака вопроса.)

Ответ 5

Для массива подстрок для поиска я бы рекомендовал

needles = ["whatever", "pretty"]

if haystack.match(Regexp.union(needles))
  ...
end

Ответ 6

Чтобы проверить, содержит ли хотя бы одну из двух подстрок:

haystack[/whatever|pretty/]

Возвращает первый найденный результат

Ответ 7

Я пытался найти простой способ поиска нескольких подстрок в массиве и в итоге ниже, который также отвечает на вопрос. Я добавил ответ, поскольку я знаю, что многие вундеркинды рассматривают другие ответы, а не только принятые.

haystack.select { |str| str.include?(needle1) || str.include?(needle2) }

и при поиске частично:

haystack.select { |str| str.include?('wat') || str.include?('pre') }