2013-05-06 19 views
9

Come unire più espressioni regolari (javascript) in una singola?Unione di espressioni regolari

Ad esempio, dato [/^abcd$/,/^abxy$/,/^abz$/] l'output sarà /^ab(cd|xy|z)$/.

È anche computazionalmente possibile?

+2

Partecipare è semplice, basta o ('|') le diverse espressioni. La tua domanda implica che vuoi che lo strumento "semplifichi" anche l'espressione. Come si misura la complessità di una regexp? –

+2

Lo "strumento" che ho usato in passato è questo modulo Perl http://search.cpan.org/~dankogai/Regexp-Optimizer-0.15/lib/Regexp/Optimizer.pm Unisciti a loro come dice il commento sopra e quindi eseguire la regex attraverso di esso e sarà ottimizzato. –

+0

@cryptic ツ quanto successo ha avuto questo strumento sperimentale? se uno è scettico sui risultati, starei lontano da esso a meno che tu non voglia solo imparare l'espressione regolare – gillyspy

risposta

4

È abbastanza facile creare uno strumento simile per casi semplici. Basta mettere ciascun modello in parentesi e unirli a "|". Così, per il tuo esempio serie di modelli diventa:

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

Su un secondo pensiero, parentesi potrebbero non essere necessario, in modo che questo farà:

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

'/ ((?:^abcd $) | (?:^abxy $) | (?:^abz $)) /' forse questa è una soluzione migliore per raggrupparlo in 1 gruppo corrispondente? – HamZa

+0

A condizione che JavaScript riesca a regex il supporto (? :) usarli è davvero meglio. Tuttavia, direi che racchiuderli tutti in un'altra parentesi non è necessario e risolverebbe un problema leggermente diverso. – spbnick

+0

sì, quello farà il trucco, ma non nella forma più corta, immagino che avrei dovuto essere più preciso - come posso farlo in a, chiamiamolo "forma canonica", come nel mio esempio? – user1088045