首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Node中使用换行符('\n')拆分字符串?

如何在Node中使用换行符('\n')拆分字符串?
EN

Stack Overflow用户
提问于 2014-02-20 07:54:36
回答 5查看 216.1K关注 0票数 168

在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");

但是上面的方法不起作用。

EN

回答 5

Stack Overflow用户

发布于 2014-02-20 08:03:16

尝试在像/\r?\n/这样的正则表达式上进行拆分,以便在Windows和UNIX系统上都可以使用。

> "a\nb\r\nc".split(/\r?\n/)
[ 'a', 'b', 'c' ]
票数 290
EN

Stack Overflow用户

发布于 2018-10-23 19:15:44

看起来正则表达式/\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" ]

您还可以通过添加|\xHH|\uHHHH部件来教正则表达式识别其他合法的Unicode line terminators,其中H是附加的终结符字符代码点的十六进制数字(如维基百科文章中的U+HHHH所示)。

票数 44
EN

Stack Overflow用户

发布于 2018-03-25 05:50:15

通过使用两个替换和一个拆分,可以实现适用于所有可能的行尾(包括混合行尾和保留空行)的解决方案

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)
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21895233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档