Одно и то же регулярное выражение может использоваться для фильтрации доменов с TLD и возврата TLD:
/\.(.+?)$/
Вот несколько примеров использования:
domains = %w[ foo foo. foo.com ].select{ |d| d[/\.(.+?)$/, 1] }
=> ["foo.com"]
domains = %w[ foo foo. foo.com ].map{ |d| d[/\.(.+?)$/, 1] }
=> [nil, nil, "com"]
Основано на комментарии Савы:
%w[ foo foo. foo.com foo.bar.com ].select{ |d| d[/(?<=\.)([a-z0-9-]+?)$/i, 1] }
=> ["foo.com", "foo.bar.com"]
%w[ foo foo. foo.com foo.bar.com ].map{ |d| d[/(?<=\.)([a-z0-9-]+?)$/i, 1] }
=> [nil, nil, "com", "com"]