regex - extrai nome de domínio e TLD

Estou tentando extrair o nome de domínio e o TLD (se existir) de uma strin

Para "testing.co.uk" eu quero ter uma matriz com valores: ("testing", "co.uk")

For "-testing.c" Quero ter uma matriz com um valor: ("testing")

Para "test-ing.co.uk.com" quero ter uma matriz com valores ("test-ing", "co.uk")

s regras são simple

primeiro e último caracteres do nome de domínio não podem ser "-"TLD deve ter pelo menos dois caracteres parte @TLD pode ter um caractere de ponto "." mas somente se for seguido por pelo menos duas letras

Eu tenho isto

(\w[-\w]*\w) - Primeira parte que extrai o nome do domínio (Working)\.(\w{2,}(\.?\w{2,})?) - obtenha o TLD (não está funcionando)

questionAnswers(4)

yourAnswerToTheQuestion