2009-09-26 13 views
7

Necesito encontrar 1 o más grupos definidos de caracteres entre paréntesis. Si hay más de un grupo presente, se separará con un guión.Intentando encontrar grupos de letras con expresiones regulares

Ejemplo:

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

que he descubierto cómo encontrar el grupo si la cadena contiene un solo grupo:

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

Sin embargo, estoy desconcertado cuando se trata de encontrar más de uno, separado por un hypen y sin ningún orden en particular: (us-jp) O (jp-us)

Se agradece cualquier ayuda.

Gracias, Simon

+0

¿Puede aclarar lo que está buscando? La expresión regular que proporciones ubicará tanto (us-jp) como (jp-us). – bbg

Respuesta

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

Explicación:

 
\(     // 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 

partidos:

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

no coincide:

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

Buena solución, tuve una más larga, pero especificar el límite de palabras '\ b' antes de los paréntesis asegura que no tengamos un trazo final allí. –

2

Prueba esto:

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

que coincidirá con cualquier secuencia de dos letras entre paréntesis que mi contienen más de dos secuencias de letras separeted por hypens. Entonces (ab), (ab-cd), (ab-cd-ef), (ab-cd-ef-gh) etc.

+0

Otra posibilidad, +1. Sin embargo, no coincide con el requisito de "grupos definidos de caracteres". Sin embargo, corregir esto requeriría repetirse. – Tomalak

Cuestiones relacionadas