Ich habe einen Text in einem Textbereich und lese ihn mit dem Attribut .value vor.
Jetzt möchte ich alle Zeilenumbrüche entfernen (das Zeichen, das beim Drücken erzeugt wird Enter ) aus meinem Text entfernen, indem ich jetzt .replace mit einem regulären Ausdruck verwende. Aber wie zeige ich einen Zeilenumbruch in einem regulären Ausdruck an?
Wenn das nicht möglich ist, gibt es einen anderen Weg?
javascript
regex
string
Flügelklinge
quelle
quelle
Antworten:
Dies ist wahrscheinlich eine FAQ. Auf jeden Fall können Zeilenumbrüche (besser: Zeilenumbrüche) Carriage Return (CR,
\r
auf älteren Macs), Line Feed (LF\n
, auf Unices inkl. Linux) oder CR sein, gefolgt von LF (\r\n
, unter WinDOS). (Im Gegensatz zu einer anderen Antwort hat dies nichts mit der Zeichenkodierung zu tun.)Daher ist das effizienteste
RegExp
Literal für alle VariantenWenn Sie alle Zeilenumbrüche in einer Zeichenfolge abgleichen möchten, verwenden Sie eine globale Übereinstimmung.
beziehungsweise. Fahren Sie dann mit der
replace
in mehreren anderen Antworten vorgeschlagenen Methode fort. (Wahrscheinlich möchten Sie die Zeilenumbrüche nicht entfernen, sondern durch andere Leerzeichen ersetzen, z. B. das Leerzeichen, damit die Wörter intakt bleiben.)quelle
\u000a
oder\n
, bei denen es sich um einen Zeilenvorschub handelt;\u000d
oder\r
, was ein Wagenrücklauf ist;\u2028
ein Zeilentrennzeichen; und\u2029
ein Absatztrennzeichen. In der Praxis ist der von Ihnen veröffentlichte Regex jedoch in den meisten Fällen ausreichend..value
dynamisch festgelegt wird, ztextarea.value = 'a\u2029b'; textarea.value.charAt(1) == '\u2029'; // true
. Aber dies ist wahrscheinlich ein Randfall - wie gesagt, in den meisten Fällen ist Ihre Regex ausreichend.Wie Sie einen Zeilenumbruch finden, hängt von den Betriebssystemcodierungen ab. Windows wäre
\r\n
, aber Linux verwendet nur\n
und Apple verwendet\r
.Ich fand dies in JavaScript-Zeilenumbrüchen :
Das sollte alle Arten von Zeilenumbrüchen entfernen.
quelle
\r\n
und\n
und\r
besser als nur/[\n\r]/g
? Dies ist sicherlich langsamer als es sein sollte, da nur jedes Zeichen mit dem Satz von zwei möglichen Optionen verglichen werden muss.String.trim()
Entfernt Leerzeichen vom Anfang und Ende von Zeichenfolgen ... einschließlich Zeilenumbrüchen.Hier ist ein Beispiel für eine Geige: http://jsfiddle.net/BLs8u/
HINWEIS! Es werden nur der Anfang und das Ende der Zeichenfolge abgeschnitten, keine Zeilenumbrüche oder Leerzeichen in der Mitte der Zeichenfolge.
quelle
Sie können
\n
in einem regulären Ausdruck für Zeilenumbrüche und\r
für Wagenrückläufe verwenden.Unterschiedliche Betriebssysteme verwenden unterschiedliche Zeilenenden mit unterschiedlichen Mischungen von
\n
und\r
. Diese Regex ersetzt sie alle.quelle
/\n|\r/g
ist effizienter geschrieben/[\n\r]/g
oder sogar/[\n\r]+/g
. Vermeiden Sie Wechsel, es sei denn, Sie brauchen es unbedingt.Wenn Sie alle Steuerzeichen einschließlich CR und LF entfernen möchten, können Sie Folgendes verwenden:
Es werden alle nicht druckbaren Zeichen entfernt. Dies sind alles Zeichen, die sich NICHT im ASCII HEX-Bereich befinden
0x20-0x7E
. Sie können den HEX-Bereich nach Bedarf ändern.quelle
Die einfachste Lösung wäre:
.replace()
Mit/\s+/g
regexp werden alle Gruppen von Leerzeichen in ein einzelnes Leerzeichen in der gesamten Zeichenfolge geändert. Anschließend werden alle überschüssigen.trim()
Leerzeichen vor und nach dem Text entfernt.Werden als Leerzeichen betrachtet:
[ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
quelle
str = str.replace(/\s+/g, ' ').trim();
quelle
Verwenden Sie Folgendes, um neue Zeilenzeichen zu entfernen:
Dann können Sie Ihre Zeichenfolge kürzen, um führende und nachfolgende Leerzeichen zu entfernen:
quelle
Die Antwort von PointedEars ist alles, was die meisten von uns brauchen. Indem ich der Antwort von Mathias Bynens folgte, machte ich eine Wikipedia-Reise und fand Folgendes: https://en.wikipedia.org/wiki/Newline .
Das Folgende ist eine Drop-In-Funktion, die alles implementiert, was die obige Wiki-Seite zum Zeitpunkt dieser Antwort als "neue Zeile" betrachtet.
Wenn etwas nicht zu Ihrem Koffer passt, entfernen Sie es einfach. Wenn Sie auf der Suche nach Leistung sind, ist dies möglicherweise nicht der Fall, aber für ein schnelles Tool, das die Arbeit auf jeden Fall erledigt, sollte dies nützlich sein.
quelle
\R
"alle" Linefeeds. Zweitens - warum nicht einfachsomeString.replace(new RegExp(lineTerminators.join('|')), '');
replace()
für das zu laufenlineTerminators
, was in der Zeichenfolge vorhanden war.Ein Zeilenumbruch in Regex ist \ n, also wäre Ihr Skript
quelle
Ich füge meine Antwort hinzu, es ist nur ein Addon zu dem oben genannten, da ich alle / n-Optionen ausprobiert habe und es nicht funktioniert hat. Ich habe gesehen, dass mein Text vom Server mit einem doppelten Schrägstrich kommt, also habe ich Folgendes verwendet:
quelle
NUTZEN SIE DIESE FUNKTION UNTEN UND MACHEN SIE IHR LEBEN EINFACH
Am einfachsten ist es, reguläre Ausdrücke zu verwenden, um Zeilenumbrüche in der Zeichenfolge zu erkennen und zu ersetzen. In diesem Fall verwenden wir die Ersetzungsfunktion zusammen mit der Zeichenfolge, durch die ersetzt werden soll. In unserem Fall handelt es sich um eine leere Zeichenfolge.
Im obigen Ausdruck stehen g und m für globale und mehrzeilige Flags
quelle
Versuchen Sie den folgenden Code. Es funktioniert auf allen Plattformen.
quelle
Verwenden
\n
Sie auf einem Mac einfach in Regexp, um Zeilenumbrüche abzugleichen. Der Code lautet alsostring.replace(/\n/g, '')
ps: Das g gefolgt bedeutet, dass alle statt nur der ersten übereinstimmen.Unter Windows wird es sein
\r\n
.quelle