Tak na marginesie, podczas gdy odpowiedź Hamza za prace dla bieżącej próbki kodu, jeśli trzeba upewnij się, że nazwy domen są również prawidłowe, możesz spróbować zastosować inne podejście, ponieważ [^.\s]+
będzie pasować do znaku ANY, który nie jest spacją lub .
(na przykład, że wyrażenie regularne będzie pasować do jk&^%&*(l.example.com
jako "poprawnej" subdomeny).
Ponieważ jest dużo mniej ważnych znaków dla wartości nazw domen niż są one nieprawidłowe, można rozważyć zastosowanie podejścia "dodatek" do wyrażenia regularnego, a nie subtraktywnego. Ten wzorzec jest prawdopodobnie tym, którego szukasz w przypadku prawidłowych nazw domen: /(?:[\s.])([a-z0-9][a-z0-9-]+[a-z0-9]\.example\.com)/gi
Złam to trochę więcej. . .
(?:[\s.])
- pasuje do przestrzeni lub .
, które wyznaczają początek subdomeny poziomu loweset
([a-z0-9][a-z0-9-]+[a-z0-9]\.example\.com)
- ten rejestruje grupy liter, cyfr i myślników, że musi się zaczynać i kończyć się od litery lub liczby (reguły nazw domen), a następnie domena example.com
.
gi
- sprawia, że wzór regex chciwy i sprawa niewrażliwe
W tym momencie, to po prostu kwestia chwytając mecze. Od .match()
nie gra dobrze z „grupy non-Przechwytywanie” regex, zamiast używać .exec()
:
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]);
}
W tym momencie aMatchedDomainStrings
powinna zawierać wszystkich ważnych, pierwszego stopnia, subdomen.
var domainString = "test foo abc.def.example.com bar ghi.jkl.example.com def";
. . . Należy Ci: def.example.com
i jkl.example.com
, przy czym:
var domainString = "test foo abc.def.example.com bar ghi.jk&^%&*(l.example.com def";
. . . powinieneś dostać tylko: def.example.com
Myślę, że miałeś na myśli '(? HamZa