Beste Weg, um JS Regex-erfassungsgruppen in der Reihe?
Genau das, was Titel fragt. Ich werde Ihnen einige Beispiele bei der Erläuterung meiner Frage.
Test-string:
var test = "#foo# #foo# bar #foo#";
Sagen, ich will alle extrahieren von text zwischen #
(alle foo
s aber nicht bar
).
var matches = test.match(/#(.*?)#/g);
Mit .match
wie oben, werde es speichern alle Spiele, aber es wird einfach wegwerfen, die Erfassung von Gruppen, so scheint es.
var matches2 = /#(.*?)#/g.exec(test);
Den .exec
Methode offenbar zurück, nur das erste Ergebnis der übereinstimmenden Zeichenfolge in der position 0
des Arrays und meine einzige Aufnahme der Gruppe, entsprechen die in der position 1
.
Habe ich SO erschöpft, Google und MDN auf der Suche nach einer Antwort, ohne Erfolg.
So, meine Frage ist, gibt es eine bessere Möglichkeit zum speichern nur die übereinstimmende Erfassung von Gruppen, die als Schleife durch es mit .exec
und ruft array.push
zum speichern der erfassten Gruppen?
Voraussichtlich meine array für den test oben sollte sein:
[0] => (string) foo
[1] => (string) foo
[2] => (string) foo
Reine JS-und jQuery-Antworten werden akzeptiert, extra cookies, wenn Sie post JSFiddle mit console.log
. =]
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
.exec
zu, die wie folgt zu erstellen ein arrayArbeiten Geige
Gefunden von Hier
Gut, es hat noch eine Schleife, wenn Sie nicht wollen, eine Schleife, dann denke ich, dass man mit der
.replace()
. In dem Fall wird der code wieÜberprüfen Sie diese Zeilen aus MDN DOC das erklärt Ihre Abfrage darüber, wie
exec
updateslastIndex
Eigenschaft, die ich denke,.exec
Schleife, die fand ich aber viel mehr vereinfacht und elegant, sieht aus wie eine geeignete Antwort, wie kann ich Zugriff auf alle Spiele und erfassen von Gruppen aus deritem
array..exec
weiß, Woher start-matching in der Zeichenfolge (dem "offset"?) es ist jedes mal aufgerufen, gut, wichtig ist, dass es funktioniert. Ich denke, es speichert automatisch dielastIndex
Eigenschaft? Wenn jemand beitragen kann, mit einem Kommentar, bitte nicht. =]the search starts at the substring of str specified by the regular expression's lastIndex property (test will also advance the lastIndex property).
(es muss die Formatierung SO x]), nochmals vielen Dank! G ' Night.Ich bin mir nicht sicher, ob dies die Antwort, die Sie suchen, aber Sie können versuchen, die folgenden code:
JS:
Hoffe, es hilft.
.replace
um die Vorteile der global-Wandler, ein wirklich süßer trick (besser als looping mit.exec
das war die Frage). Ich werde +1 für heute und akzeptieren, bevor ich gehen zu schlafen, wenn es nicht eine bessere option (wobei diese Frage offen für eine kleine Weile, als es nützlich sein könnte für zukünftige Referenz). =]data.replace(/.*?#(.*?#)/g, '$1').split(/#/)
Keine loops, keine Funktionen.
["foo", "foo", "foo"]
. Eigentliche["foo", "foo", "foo", ""]
.Anderen Gedanken, obwohl exec ist so effizient.
Fall, jemand kommt mit einem ähnlich müssen mir, ich brauchte eine passende Funktion für eine Django-Stil-URL config-handler, der passieren könnte, Pfad "Argumente" an einen controller. Ich kam mit dieser. Natürlich, es würde nicht funktionieren sehr gut, wenn matching '$' ist, aber es nicht brechen wird auf '$1.00'. Es ist ein bisschen deutlicher als nötig. Sie konnte nur zurück, matchedGroups von der else-Anweisung und nicht die Mühe mit der for-Schleife testen, aber ;; in der Mitte von einer Schleife Erklärung freaks Menschen aus manchmal.