Проверьте, содержит ли строка подстроку в массиве И получите соответствие - PullRequest
1 голос
/ 28 сентября 2019

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

str = "foobazbar"
arr = ["baz", "clowns"]
result = arr.any? { |substring| str.include?(substring) } # solution
result => true

Однако, как бы ни было элегантно и эффективно это решение, есть ли способ вернуть само совпадение?Используя приведенный выше пример, я также хочу знать, что совпадение было baz.Каков наилучший способ сделать это?

Ответы [ 2 ]

5 голосов
/ 28 сентября 2019
str = "foobazbar"
arr = ["baz", "clowns", "bar"]

r = Regexp.union(arr) #=> /baz|clowns|bar/ 

str[r]                #=> "baz"
str.scan(r)           #=> ["baz", "bar"] 

См. Regexp :: union , String # [] и String # scan .

2 голосов
/ 28 сентября 2019
str = "foobazbar"
arr = ["baz", "clowns"]
result = arr.find { |s| str.include?(s) }

result на данный момент является первым элементом в arr, который является подстрокой str или nil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...