2011-08-26 4 views
11

je la chaîne suivante: pass[1][2011-08-21][total_passes]Regex pour saisir des chaînes entre crochets

Comment pourrais-je extraire les éléments entre crochets dans un tableau? J'ai essayé

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

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

 
console.log(result);

mais cela ne les rendements [1].

Je ne sais pas comment faire cela .. Merci d'avance.

Répondre

27

Vous êtes presque là, vous juste besoin d'un global match (notez le /g drapeau):

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

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

Si vous voulez quelque chose qui ne capture que le groupe (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]); 
} 

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

Une autre option (que je préfère en général), abus de la remplacer rappel:

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

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

+0

Cela retourne les chaînes que je veux, mais elles sont toujours entre les parenthèses. – Growler

+0

J'ai du mal à analyser le contenu du tableau en multiligne. Voici l'exemple. 'export const routes: Routes = [ {chemin: '', pathMatch: 'full', redirectTo: 'arbre'}, {chemin: 'components', redirectTo: 'components/tree'}, {chemin: ' components/tree ', component: CstdTree}, {chemin:' composants/puces ', composant: CstdChips} ]; –

0

ajouter le drapeau global à votre regex, et itérer le tableau retourné.

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

vous pouvez utiliser foreach pour les chaînes correspondantes.

0

Je ne suis pas sûr si vous pouvez obtenir cela directement dans un tableau. Mais le code suivant doit travailler pour trouver toutes les occurences et les traiter:

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

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

S'il vous plaît noter: je pense vraiment que vous avez besoin de la classe de caractères [^ \]] ici. Sinon, dans mon test, l'expression correspondrait à la chaîne de trous, car] est également compatible avec. *.

Questions connexes