webentwicklung-frage-antwort-db.com.de

Wie in Knoten, um Zeichenfolge nach Zeilenumbruch ('\ n') zu teilen?

Wie in Knoten, um Zeichenfolge nach Zeilenumbruch zu teilen ('\ n')? Ich habe einen einfachen String wie var a = "test.js\nagain.js" Und muss ["test.js", "again.js"] Bekommen. Ich habe es versucht

a.split("\n");
a.split("\\n");
a.split("\r\n");
a.split("\r");

aber keiner der oben genannten funktioniert nicht.

106
PaolaJ.

Versuchen Sie, einen regulären Ausdruck wie /\r?\n/ kann sowohl auf Windows- als auch auf UNIX-Systemen verwendet werden.

> "a\nb\r\nc".split(/\r?\n/)
[ 'a', 'b', 'c' ]
189
maerics

Wenn die Datei systemeigen ist (dies ist jedoch nicht garantiert), kann Node) Ihnen helfen:

var os = require('os');

a.split(os.EOL);

Dies ist in der Regel für die Erstellung von Ausgabe Zeichenfolgen aus Node jedoch aus Gründen der Plattformportabilität nützlicher.

38
qubyte
a = a.split("\n");

Beachten Sie, dass splitting das neue Array zurückgibt, anstatt es nur der ursprünglichen Zeichenfolge zuzuweisen. Sie müssen es explizit in einer Variablen speichern.

26
alex

Eine Lösung, die mit allen möglichen Zeilenenden einschließlich gemischter Zeilen und auch mit Leerzeilen funktioniert, kann mit zwei Ersetzungen und einer Aufteilung wie folgt erreicht werden

text.replace(/\r\n/g, "\r").replace(/\n/g, "\r").split(/\r/);

ein Code, um es zu testen

  var CR = "\x0D";  //   \r
  var LF = "\x0A";  //   \n

  var mixedfile = "00" + CR + LF +            // 1 x win
                  "01" + LF +                 // 1 x linux
                  "02" + CR +                 // 1 x old mac
                  "03" + CR + CR +            // 2 x old mac
                  "05" + LF + LF +            // 2 x linux
                  "07" + CR + LF + CR + LF +  // 2 x win
                  "09";

  function showarr (desc, arr)
  {
     console.log ("// ----- " + desc);
     for (var ii in arr)
        console.log (ii + ") [" + arr[ii] +  "] (len = " + arr[ii].length + ")");
  }

  showarr ("using 2 replace + 1 split", 
           mixedfile.replace(/\r\n/g, "\r").replace(/\n/g, "\r").split(/\r/));

und die Ausgabe

  // ----- using 2 replace + 1 split
  0) [00] (len = 2)
  1) [01] (len = 2)
  2) [02] (len = 2)
  3) [03] (len = 2)
  4) [] (len = 0)
  5) [05] (len = 2)
  6) [] (len = 0)
  7) [07] (len = 2)
  8) [] (len = 0)
  9) [09] (len = 2)
16

Es sieht so aus, als würde Regex /\r\n|\r|\n/ CR-, LF- und CRLF-Zeilenenden sowie deren gemischte Sequenzen verarbeiten und alle leeren Zeilen dazwischen belassen. Versuch das!

function splitLines(t) { return t.split(/\r\n|\r|\n/); }

// single newlines
splitLines("AAA\rBBB\nCCC\r\nDDD");
// double newlines
splitLines("EEE\r\rFFF\n\nGGG\r\n\r\nHHH");
// mixed sequences
splitLines("III\n\r\nJJJ\r\r\nKKK\r\n\nLLL\r\n\rMMM");

Sie sollten diese Arrays als Ergebnis erhalten:

[ "AAA", "BBB", "CCC", "DDD" ]
[ "EEE", "", "FFF", "", "GGG", "", "HHH" ]
[ "III", "", "JJJ", "", "KKK", "", "LLL", "", "MMM" ]

Sie können diesem Regex auch beibringen, andere legitime Unicode-Zeilenabschlusszeichen zu erkennen, indem Sie |\xHH Oder |\uHHHH Teile hinzufügen, wobei H 's sind hexadezimale Ziffern des zusätzlichen Terminatorzeichen-Codepunkts (wie im Wikipedia-Artikel als U+HHHH angegeben).

11
blakkwater

Der erste sollte funktionieren:

> "a\nb".split("\n");
[ 'a', 'b' ]
> var a = "test.js\nagain.js"
undefined
> a.split("\n");
[ 'test.js', 'again.js' ]
6
TimWolla

Ich habe ein eol -Modul für die Arbeit mit Zeilenenden in Knoten oder Browsern erstellt. Es hat eine Split-Methode wie

var lines = eol.split(text)
4
ryanve