2013-05-06 17 views
9

Jak dołączyć kilka wyrażeń regularnych (javascript) do jednego?Łączenie wyrażeń regularnych

Na przykład, biorąc pod uwagę [/^abcd$/,/^abxy$/,/^abz$/], wyjście będzie /^ab(cd|xy|z)$/.

Czy jest to nawet możliwe obliczeniowo?

+2

Dołączanie jest proste, wystarczy lub ('|') różne wyrażenia. Twoje pytanie sugeruje, że chcesz, aby narzędzie również "upraszczało" wyrażenie. Jak mierzysz złożoność wyrażeń regularnych? –

+2

"Narzędziem", z którego korzystałem w przeszłości, jest ten moduł Perla http://search.cpan.org/~dankogai/Regexp-Optimizer-0.15/lib/Regexp/Optimizer.pm. Wystarczy dołączyć do nich, jak mówi powyższy komentarz , a następnie uruchom przez niego wyrażenie regularne, które zostanie zoptymalizowane. –

+0

@Cryptic ツ Jak skuteczne było to narzędzie eksperymentalne? jeśli ktoś jest sceptyczny wobec wyników, to trzymałbym się z dala od tego, chyba że chcesz się nauczyć regex – gillyspy

Odpowiedz

4

To proste narzędzie do prostych przypadków. Po prostu umieść każdy wzorzec w nawiasie i połącz z "|". Tak na Twój przykład zestaw wzorców staje:

/(^abcd$)|(^abxy$)|(^abz$)/ 

Na drugim myśli, nawiasy może nie być konieczne, tak to zrobi:

/^abcd$|^abxy$|^abz$/ 
+0

'/ ((?:^abcd $) | (?:^abxy $) | (?:^abz $)) /' może to jest lepsze rozwiązanie do grupowania go w 1 pasującej grupie? – HamZa

+0

Dostarczone wsparcie JavaScript regexes (? :) ich używanie jest rzeczywiście lepsze. Powiedziałbym jednak, że zawijanie ich wszystkich w nawiasach jest niepotrzebne i rozwiązałoby nieco inny problem. – spbnick

+0

tak, to wystarczy, ale nie w najkrótszej formie, wydaje mi się, że powinienem być bardziej precyzyjny - jak to zrobić w a, nazwijmy to "formą kanoniczną", jak w moim przykładzie? – user1088045

Powiązane problemy