2009-09-26 22 views
7

Parantez içinde eklenmiş 1 veya daha fazla tanımlı karakter grubunu bulmam gerekiyor. Birden fazla grup varsa, bir tire ile ayrılacaktır.Regex ile harfler gruplarını bulmaya çalışıyor

Örnek:

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

Ben dize yalnızca bir grubu içeriyorsa grubu bulmak için nasıl düşündüm: Ancak

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

, ben şaşkın değilim o daha bulmaya geldiğinde Bir, bir hipen ile ayrılmış ve belirli bir sırayla ayrılmadı: (us-jp) VEYA (jp-us)

Herhangi bir yardım için teşekkür ederiz.

sayesinde Simon

+0

Aradığınızı netleştirebilir misiniz? Sağladığınız normal ifade, (us-jp) ve (jp-us) öğelerini bulur. – bbg

cevap

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

Açıklama:

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

maçlar:

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

eşleşmiyor:

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

İyi bir çözüm, daha uzun bir tane vardı, ancak parantez içinde "\ b" sözcüğü sınırını belirtmek orada bir iz bırakmadığımızı garantiliyor. –

2

bu deneyin: benim hypens tarafından separeted daha iki harfli içerdiğine dikkat parantez içinde herhangi iki harfli dizisini maç olacak

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

. (ab), (ab-cd), (ab-cd-ef), (ab-cd-ef-gh) vb.

+0

Başka bir olasılık, +1. Yine de, "tanımlı karakter grupları" gereksinimiyle uyuşmuyor. Ancak, bunu düzeltmek kendini tekrar etmeyi gerektirir. – Tomalak