2009-09-26 2 views
7

Ho bisogno di trovare 1 o più gruppi definiti di caratteri racchiusi tra parentesi. Se è presente più di un gruppo, verrà separato con un trattino.Cercando di trovare gruppi di lettere con regex

Esempio:

(us) 
(jp) 
(jp-us) 
(jp-us-eu) 

ho capito come trovare il gruppo se la stringa contiene un solo gruppo:

/\(us\)|\(jp\)/ 

Tuttavia, sono sconcertato quando si tratta di trovare più di uno, separato da un hypen e in nessun ordine particolare: (us-jp) O (jp-us)

Qualsiasi aiuto è apprezzato.

Grazie, Simon

+0

Potete chiarire che cosa state cercando? La regex che fornisci localizzerà sia (us-jp) che (jp-us). – bbg

risposta

13
\((\b(?:en|jp|us|eu)-?\b)+\) 

Spiegazione:

 
\(     // opening paren 
(      // match group one 
    \b     // word boundary 
    (?:en|jp|us|eu)  // your defined strings 
    -?     // a hyphen, optional 
    \b     // another word boundary 
)+      // repeat 
\)      // closing paren 

partite:

(us) 
(jp) 
(jp-us) 
(jp-us-eu) 

non corrisponde:

(jp-us-eu-) 
(-jp-us-eu) 
(-jp-us-eu-) 
+1

Buona soluzione, ne avevo una più lunga, ma specificare il limite della parola '\ b' prima delle parentesi ci assicura che non abbiamo un trattino finale. –

2

Prova questa:

/\([a-z]{2}(?:-[a-z]{2})*\)/ 

che abbineranno ogni sequenza di due lettere tra parentesi che la mia contenere più di due sequenze di lettere separeted da hypens. Quindi (ab), (ab-cd), (ab-cd-ef), (ab-cd-ef-gh) ecc.

+0

Un'altra possibilità, +1. Tuttavia, non corrisponde al requisito dei "gruppi definiti di caratteri". Tuttavia, risolvere questo problema richiede di ripetere te stesso. – Tomalak