Я играю с некоторыми регулярными выражениями в ruby,
В настоящее время я возвращаю значение true
в своем коде.
pattern = Regexp.union(['+', '-']) #=> /\+|\-/
['foo', '+', 'bar'].any?(pattern) #=> true
Как мне вернуть строку '+'
из этого?
@TheMayerof, чтобы найти эти методы, откройте документы для Enumerable и найдите «шаблон».
Если вы просто ищете что-то, что соответствует, или даже явно первое, что соответствует, я бы использовал ['foo', '+', 'bar'].find { |x| x.match?(pattern) }
. Использование grep
вернет Array
всех совпавших элементов. Это может быть то, что вы хотите, но это не то, о чем вы нас просили. ('+'
— строка; ['+']
— массив, содержащий одну строку.)
Если производительность является проблемой, вы также можете обмануть grep
, чтобы вернуться раньше, через [...].enum_for(:grep, pattern).first
Попробуйте с этим
pattern = Regexp.union(['+', '-']) #=> /\+|\-/
используя оператор
['foo', '+', 'bar'].select{ |e| e =~ pattern }
=>["+"]
используя матч? метод
['foo', '+', 'bar'].select{ |e| e.match?(pattern)
=>["+"]
используя строку#[]
['foo', '+', 'bar'].select{ |e| e[pattern] }
=>["+"]
Использовать
.grep
вместоany?
?