JavaScript平台独立行分隔符

类似于Java的System.getProperty("line.separator"); 在JavaScript中存在?

编辑:我正在使用非浏览器的JavaScript环境Node.js

我有同样的问题,并遇到这个相当古老的问题。 经过一段时间的投入后,我终于在os文档的最后find了os.EOL

 var os = require('os') console.log(JSON.stringify(os.EOL)) // prints "\n" on my Mac 

JSON.stringify在这种情况下很重要,否则你只能在控制台中看到一个空行(这是有道理的,因为这是它应该做的)。 在正常使用情况下,不需要。

没有被标准定义,没有。 7.3节为JavaScript程序的源代码定义了行结束符(有四个),但没有涉及到平台定义的文本行结束符。

如果你正在谈论非浏览器环境(shell脚本,基于服务器的JavaScript等),我会看你正在运行的环境(NodeJS,Rhino等)的文档,这将希望为你提供这样的环境信息。 (在犀牛当然,你可以使用Java的。)

如果你正在谈论基于浏览器的环境, 总的来说\n被使用,但是这是可以咬你的“一般的”。 :-)一些浏览器甚至会在JavaScript甚至看到它们之前将行结束符(如textarea )进行转换。 例如, 这个页面的原始版本根本没有回车。 但是,如果您在Internet Explorer中运行该页面,请注意它在文本区域的值中find\r字符。 不是Chrome或Firefox(即使在Windows上运行),但Opera也会添加它们(即使在* nix上运行时也是如此)。 因此,在浏览器上,通过str = str.replace(/(?:\r\n|\r)+/g, "\n"); ,我倾向于在访问多行字段值时“规范化”行尾str = str.replace(/(?:\r\n|\r)+/g, "\n"); , 以防万一。 (假设\r ,无论是在\n还是在\n ,都应该是一个换行符;老一点的Mac本身就是\r )。

继续浏览器方面,因为不同的浏览器甚至在同一个操作系统上也做不同的事情,有什么方法可以知道他们使用什么? 为什么,是的,你可以找出一个偷偷摸摸的把戏:

 function getLineBreakSequence() { var div, ta, text; div = document.createElement("div"); div.innerHTML = "<textarea>one\ntwo</textarea>"; ta = div.firstChild; text = ta.value; return text.indexOf("\r") >= 0 ? "\r\n" : "\n"; } 

这是有效的,因为在parsingHTMLstring时,使用\r\n的浏览器会即时转换 \n 。 这里有一个实时运行的副本,你可以尝试自己喜欢的浏览器(S)。


更新 :啊,你正在使用NodeJS。 不幸的是,和你一样,在NodeJS文档中我完全没有看到这件事。 NodeJS与C / C ++非常紧密地联系在一起,在C / C ++中,无论使用哪种操作系统,都可以使用\n作为换行符 – 在文本模式下打开的stream将被转换为操作系统特定版本(读写)。 但是我在NodeJS中看不到任何对文本模式文件stream的支持。 fs.open函数不会loggingfopenb标志(否则它会得到该标志的语法),如果您查看源代码, _O_BINARY在MinGW _fmode _O_BINARY设置为_O_BINARY 。 所有这些让我怀疑文件只能是二进制模式。 console.log的实现使用\n作为换行符,这是值得的。

有些浏览器使用\n和一些使用\r\n 。 如果你想拆分换行上的文本,只需使用这个:

 lines = foo.value.split(/\r\n|\r|\n/); 

不。 在RegExp中有换行符(\ n)和回车符(\ r),但没有像“line.separator”属性那样的东西。 如果我们在谈论客户端js。

这是最好的回答…等待它… StackOverflow! 如果问题包含一个确定换行符的函数,这里链接的答案提供了一个检测平台的方法,然后推断在pre或textarea中使用的平台敏感行换行符。

在浏览器中,如何确定哪种换行符合操作系统?

此外,你可以find一个很好的解释如何之外的一个前和textarea,JavaScipt转换所有行分隔符\n在这里: http : //www.bennadel.com/blog/161-Ask-Ben-Javascript-Replace-And-多行线,Breaks.htm

这对我来说(尽pipe我首先偶然发现了这个问题)。

JavaScript平台独立行分隔符

 function getLineBreakSequence() { var div, ta, text; div = document.createElement("div"); div.innerHTML = "<textarea>one\ntwo</textarea>"; ta = div.firstChild; text = ta.value; return text.indexOf("\r") >= 0 ? "\r\n" : "\n"; } 

这个问题关注的是Node.js的使用,但是这个答案很好地描述了跨浏览器和跨平台的情况。