Ich bin ziemlich sicher nach der Nacht zu versuchen, eine Antwort zu finden, dass dies nicht möglich ist, und ich habe eine Arbeit entwickelt um - aber, wenn jemand eine bessere Methode kennt, würde ich es lieben hören ...JavaScript Regex zurück Referenzen ein Array von Übereinstimmungen aus einzelnen Capture-Gruppe (mehrere Gruppen) zurück
Ich habe viele Wiederholungen auf den Code durchlaufen, und das folgende ist nur eine Gedankenreihe wirklich. Irgendwann habe ich, glaube ich, die globale Flagge benutzt, damit match() funktioniert, und ich kann mich nicht erinnern, ob es jetzt notwendig war oder nicht.
var str = "@[email protected]@ghi&jkl";
var regex = /^(?:@([a-z]+))?(?:&([a-z]+))?$/;
Die Idee hier, in diesem vereinfachten Code ist die optionale Gruppe 1, von denen es eine unbestimmte Menge ist, wird @abc übereinstimmen, @dEF und @ghi. Es werden nur die Alpha-Zeichen erfasst, von denen eines oder mehrere vorhanden sind. Gruppe 2 ist die gleiche, außer Übereinstimmungen auf & Symbol. Es sollte auch am Anfang und am Ende der Zeichenfolge verankert sein.
Ich möchte in der Lage sein, anhand der beiden Gruppen alle Spiele zu unterstützen, das heißt:
result = str.match(regex);
alert(result[1]); //abc,def,ghi
alert(result[1][0]); //abc
alert(result[1][1]); //def
alert(result[1][2]); //ghi
alert(result[2]); //jkl
Mein Kumpel sagt ihm dies in .net funktioniert gut, leider kann ich es einfach nicht an die Arbeit - nur die letzte in einer Gruppe zusammengebracht wird in der Rückseite Referenz zurückgegeben, wie in der zu sehen ist folgende:
(zusätzlich entweder machen Gruppe optional ein Chaos macht, als globales flag tut Einstellung)
var str = "@[email protected]@ghi&jkl";
var regex = /(?:@([a-z]+))(?:&([a-z]+))/;
var result = str.match(regex);
alert(result[1]); //ghi
alert(result[1][0]); //g
alert(result[2]); //jkl
Das Folgende ist die Lösung, die ich an kam, den ganzen Teil in Frage erfassen, und die Schaffung der Array selbst:
var str = "@[email protected]@ghi&jkl";
var regex = /^([@a-z]+)?(?:&([a-z]+))?$/;
var result = regex.exec(str);
alert(result[1]); //@[email protected]@ghi
alert(result[2]); //jkl
var result1 = result[1].toString();
result[1] = result1.split('@')
alert(result[1][1]); //abc
alert(result[1][2]); //def
alert(result[1][3]); //ghi
alert(result[2]); //jkl
Danke für die Antwort. Ich dachte, es könnte eine elegantere Lösung gegeben haben. http://StackOverflow.com/a/1412662/1455709 war die nächste Antwort, die ich finden konnte, hatte jedoch keinen Erfolg, wenn es den Ausdruck und Schuh-Horn es in das verkompliziert, was ich nach ... war – Patrick
Gern geschehen. Viel Glück! – Pointy