Über den neuen RegExp (myString) erstellter Regex funktioniert nicht (Backslashes)
Lesezeit: 1 Minute
Erich
Also versuche ich, eine Regex zu schreiben, die mit allen Zahlen übereinstimmt. Hier ist diese Regex:
/b[d .]+b/g
Und ich versuche, es auf der Zeichenfolge zu verwenden:
100 two 100
Und alles funktioniert gut; es stimmt mit beiden Nummern überein.
Aber ich möchte die Regex in der Form umschreiben:
new RegExp(pattern,modifiers)
Weil ich denke, es sieht klarer aus. Also schreibe ich es so:
new RegExp('b[d .]+b','g')
Aber jetzt passt es nicht mehr zum alten Teststring. Ich habe alles versucht, aber ich bekomme es einfach nicht hin. Was mache ich falsch?
Phrogz
Ihr Problem ist, dass der umgekehrte Schrägstrich in einer Zeichenfolge eine besondere Bedeutung hat; Wenn Sie einen Backslash in Ihrer Regexp haben möchten, müssen Sie zuerst wörtliche Backslashes in der Zeichenfolge erhalten, die an die Regex übergeben wird:
new RegExp('\b[\d \.]+\b','g');
Beachten Sie, dass dies eine ziemlich schlechte (permissive) Regex ist, da sie übereinstimmen wird ". . . " als ‘Nummer’, bzw "1 1...3 42". Besser wäre vielleicht:
/-?d+(?:.d+)?b/
Beachten Sie, dass dies zu seltsamen Dingen wie passt 0000.3 passt auch nicht:
Führend +
Wissenschaftliche Notation, z 1.3e7
Fehlende führende Ziffer, z .4
Beachten Sie auch, dass die Verwendung des RegExp-Konstruktors (geringfügig) langsamer und sicherlich weniger idiomatisch ist als die Verwendung eines RegExp-Literals. Die Verwendung ist nur dann sinnvoll, wenn Sie Ihre RegExp aus bereitgestellten Zeichenfolgen erstellen müssen. Die meisten, die mehr als nur mit JavaScript vertraut sind, werden die finden /.../ Notation völlig klar.
Es ist erwähnenswert, dass Sie verwenden können new RegExp(String.raw`b[d .]+b`, "g") anstatt jedes Sonderzeichen manuell zu maskieren. Beachten Sie die Backticks nach String.raw anstelle von Anführungszeichen.
– asynchron warten
10. August 21 um 17:57 Uhr
.
6681200cookie-checkÜber den neuen RegExp (myString) erstellter Regex funktioniert nicht (Backslashes)yes