Próbuję wyodrębnić parametry trasy ekspresowej za pomocą wyrażenia regularnego.
Na przykład:
www.test.com/something/:var/else/:var2
Próbuję z tym wyrażeniem regularnym:
.*/?([:]+w+)+
ale dostaję tylko ostatnią dopasowaną grupę.
Czy ktoś wie, jak dopasować oba :var
i :var2
.
Odpowiedzi:
1 dla odpowiedzi № 1Pierwszy problem polega na tym .*
jest chciwy, a zatem ominie wszystkie mecze, aż do znalezienia ostatniego. Oznacza to, że pierwszy :var
jest ominięty.
Jednak, gdy szukasz zmienna liczba grup przechwytywania (dzięki dzięki @MichaelTang), zalecam stosowanie dwóch wyrażeń regularnych w sekwencji. Pierwsze użycie
^(?:.*?/?:w+)+$
wykryć które linie zawierają elementy dwukropka...
... a następnie kilkakrotnie przeszukaj tę linię, po prostu
/:(w+)
Powoduje to umieszczenie tekstu po dwukropku w grupie przechwytywania pierwszej.
1 dla odpowiedzi nr 2
Oto jak możesz dopasować oba:
www.test.com/something/:var/else/:var2".match(/:(w+)/g)
[":var", ":var2"]