javascript replace () ersetzt keinen Text, der Literal \ r \ n Strings enthält

9

Mit diesem Code-Teil werden versteckte Zeichen wie Zeilenumbrüche und Zeilenumbrüche ausgeblendet, ohne dass JavaScript verwendet wird:

%Vor%

Aber wenn der Code tatsächlich \ r \ n Text enthält, was kann ich tun, um ihn zu trimmen, ohne r's und n's in meinem Inhalt zu beeinflussen? Ich habe diesen Code ausprobiert:

%Vor%

zu diesem Text:

%Vor%

Ich lande damit:

%Vor%

Seitennotiz: Es bleiben die Großbuchstabenversionen von R und N allein, weil ich das / i-Flag am Ende nicht aufgenommen habe und das ist in diesem Fall ok.

Was mache ich mit nur entfernen Text in der Zeichenfolge gefunden?

    
Vince 16.11.2013, 20:42
quelle

3 Antworten

20

Wenn Sie das Literal \r und das Literal \n abgleichen möchten, sollten Sie Folgendes verwenden:

%Vor%

Sie denken vielleicht, dass das passende Literal \r und \n mit [\r\n] der richtige Weg ist, es zu tun, und es ist ein wenig verwirrend, aber es wird nicht funktionieren und hier ist warum:

Denken Sie daran, dass in Zeichenklassen jedes einzelne Zeichen einen einzelnen Buchstaben oder ein einzelnes Symbol darstellt, es stellt keine Folge von Zeichen dar, es ist nur ein Satz von Zeichen.

Die Zeichenklasse [\r\n] entspricht also tatsächlich den Literalzeichen \ , r und n als separate Buchstaben und nicht als Sequenzen.

Bearbeiten: Wenn Sie alle Wagenrückläufe \r , newlines \n und auch literal \r und '\ n' ersetzen möchten, können Sie Folgendes verwenden:

%Vor%

Über (?:) bedeutet eine nicht erfassende Gruppe, da standardmäßig, wenn Sie etwas in eine gewöhnliche Gruppe () setzen, diese in eine nummerierte Variable eingefangen wird, die Sie woanders innerhalb des regulären Ausdrucks selbst verwenden können im Übereinstimmungs-Array.

(?:) verhindert die Erfassung des Werts und verursacht weniger Overhead als () . Weitere Informationen finden Sie in diesem Artikel .

    
Ibrahim Najjar 16.11.2013, 20:44
quelle
5

Wenn Sie Text mit viel \ r \ n haben und alle von ihnen speichern möchten, versuchen Sie diesen

%Vor%

Ссылка

    
quelle
1

Um sie einfach zu entfernen, scheint das für mich zu funktionieren:

%Vor%

Sie benötigen nicht * nach dem Zeichensatz, weil das g -Flag das für Sie löst.

Beachten Sie, dass dadurch alle \r oder \n Zeichen gelöscht werden, unabhängig davon, ob sie in dieser exakten Reihenfolge sind oder nicht.

Arbeitsdemo dieser Option: Ссылка

Wenn Sie diese Zeichen nur in dieser exakten Reihenfolge entfernen möchten (z. B. nur, wenn einem \r direkt ein \n folgt, können Sie Folgendes verwenden:

%Vor%

Arbeitsdemo dieser Option: Ссылка

    
jfriend00 16.11.2013 20:47
quelle