Ссылка, на которую вы ссылаетесь, немного мутная. Предварительный просмотр (?=...)
в основном позволяет вам указать дополнительное ограничение для строки, которую вы хотите сопоставить, но в этом конкретном случае вам не нужно больше ограничений, чем у вас уже есть.
([^.]+[.])*[^.]+[.][A-Za-z]{2}$
соответствует домену (с необязательными поддоменами), который содержит двухсимвольный ccTLD только из букв; и
([^.]+[.])*[^.]+[.][-A-Za-z0-9]{3,}$
соответствует домену (с дополнительными поддоменами), который содержит более трех символов, букв или цифр.
Объединение этих двух, выделение необязательного субдомена в группу без захвата приводит к
(?:[^.]+[.])*([^.]+[.][A-Za-z]{2}|[^.]+[.][-A-Za-z0-9]{3,})$
, что все еще возможно неправильно для реальных доменов верхнего уровня, которые имеют несколько меток (например, co.uk
или gob.mx
) и не допускают однобуквенные домены верхнего уровня; но он, вероятно, делает то, что вы просите.