Über den neuen RegExp (myString) erstellter Regex funktioniert nicht (Backslashes)

Lesezeit: 1 Minute

Uber den neuen RegExp myString erstellter Regex funktioniert nicht Backslashes
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?

Uber den neuen RegExp myString erstellter Regex funktioniert nicht Backslashes
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/

Geben Sie hier die Bildbeschreibung ein

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


.

668120cookie-checkÜber den neuen RegExp (myString) erstellter Regex funktioniert nicht (Backslashes)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy