2011-08-26 13 views
11

Mam następujący ciąg: pass[1][2011-08-21][total_passes]Regex porwać struny między nawiasami kwadratowymi

Jak wyodrębnić elementy między nawiasami kwadratowymi do tablicy? Próbowałem

match(/\[(.*?)\]/);

var s = 'pass[1][2011-08-21][total_passes]'; 
 
var result = s.match(/\[(.*?)\]/); 
 

 
console.log(result);

ale to tylko wraca [1].

Nie jestem pewien jak to zrobić .. Z góry dziękuję.

Odpowiedz

27

Jesteś prawie tam, po prostu potrzebują global match (zwróć uwagę na flagę /g):

match(/\[(.*?)\]/g); 

przykład: http://jsfiddle.net/kobi/Rbdj4/

Jeśli chcesz coś, tylko oddaje grupę (od MDN):

var s = "pass[1][2011-08-21][total_passes]"; 
var matches = []; 

var pattern = /\[(.*?)\]/g; 
var match; 
while ((match = pattern.exec(s)) != null) 
{ 
    matches.push(match[1]); 
} 

przykład: http://jsfiddle.net/kobi/6a7XN/

Innym rozwiązaniem (które zazwyczaj wolą), nadużywa zwrotnego Replace:

var matches = []; 
s.replace(/\[(.*?)\]/g, function(g0,g1){matches.push(g1);}) 

Przykład: http://jsfiddle.net/kobi/6CEzP/

+0

Powoduje zwrócenie pożądanych ciągów znaków, ale nadal znajdują się w nawiasach. – Growler

+0

Próbuję przeanalizować zawartość tablicy w multilinii. Oto przykład. 'export const routes: Routes = [ {ścieżka: '', pathMatch: 'full', redirectTo: 'tree'}, {ścieżka: 'komponenty', przekierowanie do: 'components/tree'}, {ścieżka: ' components/tree ', component: CstdTree}, {ścieżka:' components/chips ', component: CstdChips} ]; –

0

dodać globalną flagę do wyrażenia regularnego, a iterację tablica wróciła.

match(/\[(.*?)\]/g) 
4
var s = 'pass[1][2011-08-21][total_passes]'; 

r = s.match(/\[([^\]]*)\]/g); 

r ; //# => [ '[1]', '[2011-08-21]', '[total_passes]' ] 

example proving the edge case of unbalanced []; 

var s = 'pass[1]]][2011-08-21][total_passes]'; 

r = s.match(/\[([^\]]*)\]/g); 

r; //# => [ '[1]', '[2011-08-21]', '[total_passes]' ] 
-1

[C#]

 string str1 = " pass[1][2011-08-21][total_passes]"; 
     string matching = @"\[(.*?)\]"; 
     Regex reg = new Regex(matching); 
     MatchCollection matches = reg.Matches(str1); 

można użyć foreach dla dopasowanych strun.

0

Nie jestem pewien, czy możesz wprowadzić to bezpośrednio do tablicy. Ale następujący kod powinien pracować, aby znaleźć wszystkie wystąpienia, a następnie przetwarza je:

var string = "pass[1][2011-08-21][total_passes]"; 
var regex = /\[([^\]]*)\]/g; 

while (match = regex.exec(string)) { 
    alert(match[1]); 
} 

Uwaga: Naprawdę myślę, że trzeba klasa znaków [^ \] tutaj]. W przeciwnym razie w moim teście wyrażenie będzie pasowało do ciągu dziury, ponieważ] jest również dopasowywane przez. *.

Powiązane problemy