reg = new RegExp(/e(.*?)e/g);
var result = reg.exec(targetText);
und ich bekomme nur den ersten, aber nicht den folgenden…. Ich kann nur den T1 bekommen, aber nicht T2, T3 … …
Kann jemand eine For-Schleife vorschlagen?
– DNB5 Krempe
3. August 2009 um 12:34 Uhr
Chaos
var reg = /e(.*?)e/g;
var result;
while((result = reg.exec(targetText)) !== null) {
doSomethingWith(result);
}
Anstatt new RegExp zu verwenden und dann einen regulären Ausdruck einzufügen, tun Sie es einfach reg = /e(.*>)e/g; Die Verwendung des new-Operators ist überflüssig, es sei denn, Sie füttern ihn mit einer Zeichenfolge. Stellen Sie außerdem sicher, dass Sie dies mit dem globalen Flag (/g) kennzeichnen, da Sie sonst in einer Endlosschleife landen können.
– Frug
10. April 2014 um 21:07 Uhr
Beachten Sie, dass die Regex einem Objekt zugewiesen werden muss, bevor Sie sie auf diese Weise verwenden: /e(.*?)e/.exec(...) ergibt eine Endlosschleife.
– ARM
24. Mai 2017 um 18:36 Uhr
@RaviParekh: hast du das hinzugefügt /g Modifikator?
– Chaos
30. November 2017 um 15:26 Uhr
Der Nachwelt zuliebe muss der RegExp außerhalb der While-Schleife deklariert werden; Andernfalls erhalten Sie immer noch eine Endlosschleife.
– Modular
13. März 2018 um 16:04 Uhr
Sie können den While-Ausdruck auch verkürzen: while(result = reg.exec(targetText)) { die Nutzung der “falschen” Entschlossenheit.
– Modular
13. März 2018 um 16:10 Uhr
Modular
Drei Ansätze, je nachdem, was Sie damit machen möchten:
const regex = /e(.*?)e/g; // Must be declared outside the while expression,
// and must include the global "g" flag.
let result;
while(result = regex.exec(targetText)) {
// Do something with result[0].
}
Ironischerweise will mein Lint setzen == anstelle von = im While-Ausdruck.
– Deutsch
8. November 2019 um 15:36 Uhr
Eslint dazu zu bringen, die Single zu akzeptieren = Die Zuweisung kann wie folgt in Klammern eingeschlossen werden: while ((result = regex.exec(targetText)))
– Schean
14. November 2019 um 9:22 Uhr
Im zweiten Beispiel dort, ist Übereinstimmung ein Schlüsselwort oder eine Variable? Und wenn es eine Variable ist, was hält sie?
– Cole Perry
22. Januar 2020 um 21:26 Uhr
@ColePerry match ist die gesamte RegExp-Übereinstimmung, und $1 ist die erste Capture-Gruppe ()in diesem Beispiel nur eine.
– Modular
31. Januar 2020 um 22:09 Uhr
Hier funktioniert nur Ersetzen, da in Node.js das globale match/exec nur die Gesamtübereinstimmung ohne Gruppen zurückgibt.
– mirik
31. August 2020 um 16:14 Uhr
tvanfosson
Versuchen Sie es mit passen() auf der Zeichenfolge anstelle von exec (), obwohl Sie auch mit exec eine Schleife ausführen könnten. Match sollte Ihnen alle Matches auf einmal geben. Ich denke, Sie können den globalen Bezeichner auch weglassen.
reg = new RegExp(/e(.*?)e/);
var matches = targetText.match(reg);
Verlinken Sie nicht zu w3schools. Sie sind nicht mit dem W3C verbunden und haben viele falsche Informationen. Sehen w3fools.com.
– dbkaplun
24. Juni 2012 um 5:21 Uhr
@MindVirus – Wenn Sie nachsehen möchten, haben sie eine Menge Dinge bereinigt, auf die w3fools.com hingewiesen hat. Ich benutze sie immer noch als schnelle, wenn auch nicht endgültige Ressource. Ähnlich wie man einen Spickzettel über K&R C verwenden könnte, um etwas Einfaches nachzuschlagen.
– tvanfosson
24. Juni 2012 um 13:34 Uhr
Als fortgeschrittener Entwickler bin ich bei w3schools bereits auf ein gutes halbes Dutzend eindeutiger Fehler gestoßen. Sie sind von meiner Partyliste gestrichen.
In meinem Fall habe ich den obigen Code so bearbeitet:
const reg = /e(.*?)e/g;
let result = reg.exec(targetText);
while(result[0] !== "") {
doSomethingWith(result);
result = reg.exec(targetText);
}
targetText = "SomeT1extSomeT2extSomeT3extSomeT4extSomeT5extSomeT6ext"
reg = new RegExp(/e(.*?)e/g);
var result;
while (result = reg.exec(targetText))
{
...
}
Es funktioniert nicht. In JS kann Regex keine Gruppen mit globalem Flag extrahieren, sodass der Benutzer nur eine vollständige Übereinstimmung erhält.
– mirik
31. August 2020 um 16:11 Uhr
Christoph
Sie können auch die Methode String.replace verwenden, um alle Elemente zu durchlaufen.
result = [];
// Just get all numbers
"SomeT1extSomeT2extSomeT3ext".replace(/(\d+?)/g, function(wholeMatch, num) {
// act here or after the loop...
console.log(result.push(num));
return wholeMatch;
});
console.log(result); // ['1', '2', '3']
Grüße
Es funktioniert nicht. In JS kann Regex keine Gruppen mit globalem Flag extrahieren, sodass der Benutzer nur eine vollständige Übereinstimmung erhält.
– mirik
31. August 2020 um 16:11 Uhr
ncmathsadist
Ich habe das in einer Konsolensitzung (Chrome) gemacht.
> let reg = /[aeiou]/g;
undefined
> let text = "autoeciously";
undefined
> matches = text.matches(reg);
(7) ["a", "u", "o", "e", "i", "o", "u"]
> matches.forEach(x =>console.log(x));
a
u
o
e
i
o
u
14307400cookie-checkWie werden alle Elemente geloopt, die mit der Regex übereinstimmen?yes
Kann jemand eine For-Schleife vorschlagen?
– DNB5 Krempe
3. August 2009 um 12:34 Uhr