2014-02-19 121 views
56

如何在节点通过换行('\ n')拆分字符串? 我有简单的字符串,如var a = "test.js\nagain.js",我需要得到["test.js", "again.js"]。 我试过如何在节点通过换行符(' n')拆分字符串?

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

但是以上都不起作用。

+0

可能重复的[JavaScript字符串换行符?](http://stackoverflow.com/questions/1155678/javascript-string-newline-character) – Mene

+3

['分裂()' ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split)不会修改原始字符串。 – thgaskell

回答

2

第一个应该工作:

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

注意split婷返回新的数组,而不是仅仅把它分配给原始字符串。你需要明确地将它存储在一个变量中。

+2

如果你低于这个限制,这真的应该告诉你,你应该详细说明,而不是添加绒毛,不会增加你的答案。 –

+3

如果该限制是100个字符,该怎么办?或1000?我无法给这个答案添加任何东西,这已经够好了。 – alex

+0

极限不是100,或1000,它是30.你至少可以添加thgaskell在评论中所说的内容;这很容易让你超过30人。 –

117

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

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

经典Mac电脑怎么样? ;) – AshleyF

+3

经典Macs随着史蒂夫乔布斯去世...悲伤:( – ymz

+10

赶上\ n,\ r和\ r \ n:'split(/ [\ r \ n] + /)' –

24

如果该文件是原生系统(当然也没有的,保证),然后节点可以帮你:

var os = require('os'); 

a.split(os.EOL); 

这通常是从节点构建输出字符串比较有用尽管如此,平台可移植性。

+0

是的,你通常不应该这样做,你应该解析新行,不管平台如何。 – 1j01

+0

我强调这是专门针对第一句话中系统原生文件的情况。以上回答适用于何时未知或混合的情况 – qubyte

+0

正确或现在“已知”但未来可能会改变。 – 1j01

4

我做了一个eol module用于处理节点或浏览器中的行尾。它有一个分割方法等

var lines = eol.split(text) 
+0

很好,谢谢! – Michael