JavaScript-Alternative zu Possessive Quantifiers in Dynamic Regex

Ich verwende JavaScript, um eine Teilmenge von "Geschwistern" aus einer durch Kommas getrennten Zeichenfolge von Mitgliedern zu extrahieren, die ich als "Generierungszeichenfolge" bezeichne.

Metaphorisch sind die Mitglieder alle aus der gleichen Generation, aber sie sind nicht alle Geschwister (von den gleichen Eltern). Hier ist ein Beispiel:

// This is the generation string to search
var generation  = 'ABAA,ABAB,ABAC,ABAD,ABBA,ACAA,ACAB,ACAD,AEAB,AEAD,AFAA';

// This is the member for whom to extract siblings (member included)
var member      = 'ACAA';

Die Generierungszeichenfolge und ihre Mitglieder weisen die folgenden Merkmale auf:

Jedes Mitglied hat die gleiche Anzahl von Zeichen wie die anderenAlle Mitglieder des Strings sind alphabetisch sortiertJeder Satz von Geschwistern wird immer nebeneinander seinGeschwister sind die Mitglieder, die genau die gleiche Buchstabenkombination mit Ausnahme des letzten Buchstabens @ habe

Fortsetzung des Beispiels ...

// This is how I go about extracting the desired result: ACAA,ACAB,ACAD
var mParent     = member.substr(0, member.length - 1) ;
var mPattern    = mParent + '[A-Z]';
var mPattern    = '(.*)((' + mPattern + ')(,$1)*)(.*)'; // Trouble is here
var mRegex      = new RegExp(mPattern);
var mSiblings   = generation.replace(mRegex, '$2');

Die oben identifizierte Problemstelle betrifft Regex-Quantifizierer im konstruierten Muster. Wie oben ist alles auf gierig eingestellt, daher lautet der Wert von mSiblings:

ACAD

Das ist nur das letzte Mitglied. Das Ändern von mPattern, um weniger gierig zu sein, in der Hoffnung, die anderen Mitglieder zu extrahieren, ergibt das folgende

// Reluctant first expression yields ACAA
var mPattern = '(.*?)((' + mPattern + ')(,$1)*)(.*)'; 

// Reluctant last expression yields ACAD,AEAB,AEAD,AFAA
var mPattern = '(.*)((' + mPattern + ')(,$1)*)(.*?)'; 

// Reluctant first and last yields ACAA,ACAB,ACAD,AEAB,AEAD,AFAA
var mPattern = '(.*?)((' + mPattern + ')(,$1)*)(.*?)';

Wenn ich den mittleren Ausdruck besitzergreifend machen könnte, wäre das Problem gelöst. Etwas wie das

// Make as many "middle" matches as possible by changing (,$1)* to (,$1)*+
var mPattern = '(.*?)((' + mPattern + ')(,$1)*+)(.*?)';

Aber wie ich gelesen habe (und die Syntaxfehler haben, um es zu beweisen), unterstützt JavaScript keine Possessive Regular Expression Quantifiers. Kann jemand eine Lösung vorschlagen? Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage