Der reguläre Ausdruck, den Sie hier benötigen, kann ein bisschen schwierig sein, weil Hostnamen unendlich komplex sein können - Sie könnten mehrere Subdomains (zB. Foo.bar.baz.com) oder die Top-Level-Domain (TLD) kann mehrere Teile haben (zB www.baz.co.uk).
Bereit für einen komplexen regulären Ausdruck? :)
re = /^(?:(?>[a-z0-9-]*\.)+?|)([a-z0-9-]+\.(?>[a-z]*(?>\.[a-z]{2})?))$/i
new_url = o_url.host.gsub(re, '\1').strip
Lassen Sie uns das in zwei Abschnitte aufteilen. ^(?:(?>[a-z0-9-]*\.)+?|)
sammelt Subdomains, indem eine oder mehrere Gruppen von Zeichen gefolgt von einem Punkt gefunden werden (gierig, so dass alle Subdomains hier übereinstimmen). Die leere Alternierung wird benötigt, wenn keine Subdomain vorhanden ist (z. B. foo.com). sammelt den tatsächlichen Hostnamen und die TLD. Es erlaubt entweder eine einteilige TLD (wie .info, .com oder .museum) oder eine zweiteilige TLD, bei der der zweite Teil aus zwei Zeichen besteht (wie .oh.us oder .org.uk).
Getestet habe ich diesen Ausdruck auf die folgenden Beispiele:
foo.com => foo.com
www.foo.com => foo.com
bar.foo.com => foo.com
www.foo.ca => foo.ca
www.foo.co.uk => foo.co.uk
a.b.c.d.e.foo.com => foo.com
a.b.c.d.e.foo.co.uk => foo.co.uk
Beachten Sie, dass diese regex nicht richtig Host-Namen übereinstimmen, die mehr als zwei „Teile“ auf die TLD haben!
Forgot über diese Website, gute Antwort –