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
函数不会loggingfopen
的b
标志(否则它会得到该标志的语法),如果您查看源代码, _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的使用,但是这个答案很好地描述了跨浏览器和跨平台的情况。