RegEx pour faire correspondre les choses entre les parenthèses

J'ai du mal à faire fonctionner. J'ai une chaîne comme:

something/([0-9])/([az]) 

Et j'ai besoin de regex ou une méthode pour obtenir chaque match entre les parenthèses et renvoyer un ensemble de correspondances comme:

 [ [0-9], [az] ] 

Le regex que j'utilise est /\((.+)\)/ qui semble correspondre à la bonne chose s'il n'y a qu'un seul ensemble de parenthèses.

Comment puis-je obtenir un tableau comme ci-dessus en utilisant une méthode RegExp en JavaScript? Je dois renvoyer juste ce tableau car les éléments retournés dans le tableau seront mis en boucle pour créer un schéma de routage d'URL.

Vous devez faire de votre motif regex 'non-gourmand' en ajoutant un '?' Après le '. +'

Par défaut, '*' et '+' sont gourmands en ce sens qu'ils combineront autant de chaînes de caractères que possible, en ignorant les correspondances qui pourraient se produire dans la chaîne.

Non-gourmande rend le modèle ne correspond que le match le plus court possible.

Voir Attention à la cupidité! Pour une meilleure explication.

Ou alternativement, modifiez votre regex pour

 \(([^\)]+)\) 

Qui correspondra à tout groupement de parens qui, eux-mêmes, ne contiennent pas de parens.

Utilisez cette expression:

 /\(([^()]+)\)/g 

par exemple:

 function() { var mts = "something/([0-9])/([az])".match(/\(([^()]+)\)/g ); alert(mts[0]); alert(mts[1]); } 
 var getMatchingGroups = function(s) { var r=/\((.*?)\)/g, a=[], m; while (m = r.exec(s)) { a.push(m[1]); } return a; }; getMatchingGroups("something/([0-9])/([az])"); // => ["[0-9]", "[az]"] 

Si s est votre chaîne:

 s.replace(/^[^(]*\(/, "") // trim everything before first parenthesis .replace(/\)[^(]*$/, "") // trim everything after last parenthesis .split(/\)[^(]*\(/); // split between parenthesis