2011-08-26 15 views
11

tengo la siguiente cadena: pass[1][2011-08-21][total_passes]Regex para agarrar las cuerdas entre corchetes

¿cómo iba a extraer los elementos entre los corchetes en una matriz? Probé

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

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

 
console.log(result);

pero esto sólo vuelve [1].

No estoy seguro de cómo hacer esto ... Gracias de antemano.

Respuesta

27

Usted está casi allí, sólo se necesita un global match (tenga en cuenta la bandera /g):

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

Ejemplo: http://jsfiddle.net/kobi/Rbdj4/

Si quieres algo que sólo captura el grupo (de 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]); 
} 

Ejemplo: http://jsfiddle.net/kobi/6a7XN/

Otra opción (que por lo general yo prefiero), abusa de la devolución de llamada reemplazar:

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

Ejemplo: http://jsfiddle.net/kobi/6CEzP/

+0

Esto devuelve las cadenas que quiero, pero todavía están dentro de los corchetes – Growler

+0

Tengo dificultades para analizar el contenido de la matriz en líneas múltiples. Aquí está el ejemplo. 'export const routes: Routes = [ {path: '', pathMatch: 'full', redirectTo: 'tree'}, {path: 'components', redirectTo: 'components/tree'}, {path: ' components/tree ', componente: CstdTree}, {path:' components/chips ', componente: CstdChips} ]; –

0

añadir el indicador global a su expresión regular, e iterar la matriz devuelta.

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); 

puede usar foreach para cadenas coincidentes.

0

No estoy seguro de si puede obtener esto directamente en una matriz. Pero el siguiente código debe trabajar para encontrar todas las ocurrencias y luego procesarlos:

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

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

Tenga en cuenta: Realmente creo que necesita la clase de caracteres [^ \]] aquí. De lo contrario, en mi prueba, la expresión coincidiría con la cadena de hoyo porque] también coincide con. *.

Cuestiones relacionadas