Comment dans le nœud pour scinder une chaîne par une nouvelle ligne ('\ n')? J'ai une chaîne simple comme var a = "test.js\nagain.js"
et j'ai besoin d'obtenir ["test.js", "again.js"]
. j'ai essayé
a.split("\n");
a.split("\\n");
a.split("\r\n");
a.split("\r");
mais aucun des précédents ne fonctionne.
Essayez de séparer sur une expression rationnelle telle que /\r?\n/
pour pouvoir être utilisée par les systèmes Windows et UNIX.
> "a\nb\r\nc".split(/\r?\n/)
[ 'a', 'b', 'c' ]
Si le fichier est natif sur votre système (ce n’est certainement pas garanti), alors Node peut vous aider:
var os = require('os');
a.split(os.EOL);
Ceci est généralement plus utile pour la construction de sortie chaînes de Node bien que, pour la portabilité de la plate-forme.
a = a.split("\n");
Notez que split
ting renvoie le nouveau tableau plutôt que de l'attribuer à la chaîne d'origine. Vous devez explicitement le stocker dans une variable.
Une solution qui fonctionne avec toutes les fins de ligne possibles, y compris les extrémités mixtes, tout en conservant les lignes vides, peut être obtenue en utilisant deux remplacements et une division comme suit
text.replace(/\r\n/g, "\r").replace(/\n/g, "\r").split(/\r/);
du code pour le tester
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/));
et la sortie
// ----- 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)
Il semble que regex /\r\n|\r|\n/
gère les fins de ligne CR, LF et CRLF, leurs séquences mélangées, et conserve toutes les lignes vides entre les deux. Essayez ça!
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");
Vous devriez obtenir ces tableaux à la suite:
[ "AAA", "BBB", "CCC", "DDD" ]
[ "EEE", "", "FFF", "", "GGG", "", "HHH" ]
[ "III", "", "JJJ", "", "KKK", "", "LLL", "", "MMM" ]
Vous pouvez également apprendre à cette expression rationnelle à reconnaître d'autres parties terminaisons de ligne Unicode en ajoutant |\xHH
ou |\uHHHH
parties, où H
sont des chiffres hexadécimaux du point de code de caractère de terminaison supplémentaire (comme on le voit dans l'article Wikipedia sous le nom U+HHHH
).
Le premier devrait fonctionner:
> "a\nb".split("\n");
[ 'a', 'b' ]
> var a = "test.js\nagain.js"
undefined
> a.split("\n");
[ 'test.js', 'again.js' ]
J'ai créé un eol
module pour travailler avec les fins de ligne dans les noeuds ou les navigateurs. Il a une méthode de partage comme
var lines = eol.split(text)