在 Node 中,如何使用换行符 ('\n') 拆分字符串?我有一个简单的字符串var a = "test.js\nagain.js"
,我需要得到["test.js", "again.js"]
. 我试过
a.split("\n");
a.split("\\n");
a.split("\r\n");
a.split("\r");
但以上不起作用。
在 Node 中,如何使用换行符 ('\n') 拆分字符串?我有一个简单的字符串var a = "test.js\nagain.js"
,我需要得到["test.js", "again.js"]
. 我试过
a.split("\n");
a.split("\\n");
a.split("\r\n");
a.split("\r");
但以上不起作用。
尝试在/\r?\n/
Windows 和 UNIX 系统都可以使用的正则表达式上进行拆分。
> "a\nb\r\nc".split(/\r?\n/)
[ 'a', 'b', 'c' ]
如果该文件是您系统的本机文件(当然不能保证),那么 Node 可以帮助您:
var os = require('os');
a.split(os.EOL);
不过,为了平台可移植性,这对于从 Node构建输出字符串通常更有用。
看起来正则表达式/\r\n|\r|\n/
处理 CR、LF 和 CRLF 行尾及其混合序列,并将所有空行保留在其间。试试吧!
function splitLines(t) { return t.split(/\r\n|\r|\n/); }
// single newlines
console.log(splitLines("AAA\rBBB\nCCC\r\nDDD"));
// double newlines
console.log(splitLines("EEE\r\rFFF\n\nGGG\r\n\r\nHHH"));
// mixed sequences
console.log(splitLines("III\n\r\nJJJ\r\r\nKKK\r\n\nLLL\r\n\rMMM"));
结果你应该得到这些数组:
[ "AAA", "BBB", "CCC", "DDD" ]
[ "EEE", "", "FFF", "", "GGG", "", "HHH" ]
[ "III", "", "JJJ", "", "KKK", "", "LLL", "", "MMM" ]
您还可以教正则表达式通过添加或部分来识别其他合法的Unicode 行终止符,其中's 是附加终止符字符代码点的十六进制数字(如维基百科文章中所见)。|\xHH
|\uHHHH
H
U+HHHH
a = a.split("\n");
请注意,split
ting 返回新数组,而不仅仅是将其分配给原始字符串。您需要将其显式存储在变量中。
可以使用以下两个替换和一个拆分来实现适用于所有可能的行结尾(包括混合行结尾并保留空行)的解决方案
text.replace(/\r\n/g, "\r").replace(/\n/g, "\r").split(/\r/);
一些代码来测试它
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/));
和输出
// ----- 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)