web-dev-qa-db-fra.com

Groupes de correspondance globaux JavaScript Regex

Mise à jour: Cette question est presque identique à this

Je suis sûr que la réponse à ma question existe, mais je ne trouvais pas les mots pour l'exprimer de manière succincte. J'essaie de faire ce qui suit avec JavaScript regex:

var input = "'Warehouse','Local Release','Local Release DA'";
var regex = /'(.*?)'/g;

console.log(input.match(regex));

// Actual:
// ["'Warehouse'", "'Local Release'", "'Local Release DA'"]

// What I'm looking for (without the '):
// ["Warehouse", "Local Release", "Local Release DA"]

Existe-t-il un moyen simple de faire cela avec JavaScript regex? Évidemment, je pourrais effacer moi-même le 's, mais je cherche la bonne façon de capter les groupements globalement assortis avec regex.

28
Jondlm

Pour ce faire avec une expression rationnelle, vous aurez besoin d’itérer dessus avec .exec() afin d’obtenir plusieurs groupes correspondants. L'indicateur g avec correspondance ne renverra que plusieurs correspondances entières, pas plusieurs sous-correspondances comme vous le souhaitiez. Voici un moyen de le faire avec .exec().

var input = "'Warehouse','Local Release','Local Release DA'";
var regex = /'(.*?)'/g;

var matches, output = [];
while (matches = regex.exec(input)) {
    output.Push(matches[1]);
}
// result is in output here

Démo de travail: http://jsfiddle.net/jfriend00/VSczR/


Avec certaines hypothèses sur le contenu des chaînes, vous pouvez aussi simplement utiliser ceci:

var input = "'Warehouse','Local Release','Local Release DA'";
var output = input.replace(/^'|'$/, "").split("','");

Démo de travail: http://jsfiddle.net/jfriend00/MFNm3/

69
jfriend00

Solution peu générique car lookbehind n'est pas supporté en Javascript mais pour une entrée donnée, cette expression rationnelle devrait fonctionner:

m = input.match(/([^',]+)(?=')/g);
//=> ["Warehouse", "Local Release", "Local Release DA"]
5
anubhava

Essayez quelque chose comme input.replace(regex, "$1") pour obtenir les résultats de votre groupe de capture.

1
cjc343

cette expression rationnelle fonctionne mais avec des caractères définis ...

var input = "'Warehouse','Local Release','Local Release DA'";

var r =/'[\w\s]+'/gi;
console.log(input.match(regex));
0
Techsin