regexes = [ regex_1, regex_2, regex_3, regex_4, regex_5 ].
select{|r| sample_text =~ r }.
sort_by{|r| sample_text =~ r}
regexes.first
#=> /some regex here/
Сортирует регулярные выражения по позициям совпадений.
sample_text =~ r
возвращает позицию совпадения sort_by
отсортирует наш массив по позициям совпадения
UPD
Как только что упомянутый @Holger match
может вернуть nil
, что сломает нашу sort_by
, поэтому нам следует select
только те регулярные выражения, которые будутmatch
наш smaple_text
и коротенький хакерский путь:
[ regex_1, regex_2, regex_3, regex_4, regex_5 ].sort_by{|r| 1.0/(sample_text=~r).to_i}