Аналогичное решение без регулярных выражений
arr.sort_by { |s|
s.split('@').first.split('.').last
}
Шаг за шагом
'Joe.Black@company.org'.split ('@') ➡ ['Joe.Black', 'company.org']
['Joe.Black', 'company.org']. First ➡ 'Joe.Black'
'Joe.Black'.split ('. ') ➡ [' Joe ',' Black ']
['Джо', 'Черный']. Последний ➡ 'Черный'
блок возвращает «черный», который будет использоваться для сортировки «Joe.Black@company.org» * 10101
статья о сортировке против sort_by