it-swarm.com.de

Globale Match-Gruppen für JavaScript Regex

Update: Diese Frage ist fast ein Duplikat von this

Ich bin mir sicher, dass die Antwort auf meine Frage da draußen ist, aber ich konnte die Worte nicht finden, um sie auf den Punkt zu bringen. Ich versuche, Folgendes mit JavaScript Regex zu tun:

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"]

Gibt es eine saubere Möglichkeit, dies mit JavaScript-Regex zu tun? Natürlich könnte ich die 's selbst entfernen, aber ich suche den richtigen Weg, um global angepasste Gruppierungen mit Regex zu erreichen.

28
Jondlm

Um dies mit einem regulären Ausdruck zu erreichen, müssen Sie mit .exec() darüber iterieren, um mehrere übereinstimmende Gruppen zu erhalten. Das g-Flag mit Übereinstimmung gibt nur mehrere vollständige Übereinstimmungen zurück, nicht mehrere Unterkämpfe, wie Sie es wollten. Hier ist eine Möglichkeit, dies mit .exec() zu tun.

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

Arbeitsdemo: http://jsfiddle.net/jfriend00/VSczR/


Mit bestimmten Annahmen darüber, was in den Strings enthalten ist, können Sie auch Folgendes verwenden:

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

Arbeitsdemo: http://jsfiddle.net/jfriend00/MFNm3/

69
jfriend00

Nicht sehr generische Lösung, da lookbehind in Javascript nicht unterstützt wird, aber für gegebene Eingaben sollte dieser Regex funktionieren:

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

Versuchen Sie etwas wie input.replace(regex, "$1"), um die Ergebnisse Ihrer Capture-Gruppe zu erhalten.

1
cjc343

diese Regex funktioniert aber mit definierten Zeichen ...

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

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