solo su un lato nota, mentre la risposta di Hamza funziona per il vostro codice di esempio corrente, se è necessario assicurarsi che i nomi di dominio siano validi, potresti provare un approccio diverso, poiché [^.\s]+
corrisponderà a ANY carattere che non è uno spazio o .
(ad esempio, che un'espressione regolare corrisponderà a jk&^%&*(l.example.com
come sottodominio "valido").
Poiché ci sono molti meno caratteri validi per i valori dei nomi di dominio rispetto a quelli non validi, si potrebbe considerare l'utilizzo di un approccio "additivo" alla regex, piuttosto che sottrattivo. Questo schema è probabilmente quello che stai cercando per nomi di dominio validi: /(?:[\s.])([a-z0-9][a-z0-9-]+[a-z0-9]\.example\.com)/gi
Per abbattere un po 'di più. . .
(?:[\s.])
- corrisponde lo spazio o .
che avrebbe segnato l'inizio del sottodominio di livello loweset
([a-z0-9][a-z0-9-]+[a-z0-9]\.example\.com)
- questa cattura un gruppo di lettere, numeri o trattini, che deve iniziare e finire con una lettera o un numero (regole nome dominio) e quindi il dominio example.com
.
gi
- rende il modello regex avido e case insensitive
A questo punto, è semplicemente una questione di afferrare le partite. Dal momento che .match()
non gioca bene con i "gruppi non-cattura" l'espressione regolare, utilizzare .exec()
invece:
var domainString = "test foo abc.def.example.com bar ghi.jkl.example.com def";
var regDomainPattern = /(?:[\s.])([a-z0-9][a-z0-9-]+[a-z0-9]\.example\.com)/gi;
var aMatchedDomainStrings = [];
var patternMatch;
// loop through as long as .exec() still gets a match, and take the second index of the result (the one that ignores the non-capturing groups)
while (null != (patternMatch = regDomainPattern.exec(domainString))) {
aMatchedDomainStrings.push(patternMatch[1]);
}
A quel punto aMatchedDomainStrings
dovrebbe contenere tutte le vostre valide, di primo livello, sotto-domini.
var domainString = "test foo abc.def.example.com bar ghi.jkl.example.com def";
. . . dovrebbe farti: def.example.com
e jkl.example.com
, mentre:
var domainString = "test foo abc.def.example.com bar ghi.jk&^%&*(l.example.com def";
. . . dovresti prenderti solo: def.example.com
Penso che intendessi '(? HamZa