Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript平台无关的行分隔符_Javascript_Node.js - Fatal编程技术网

JavaScript平台无关的行分隔符

JavaScript平台无关的行分隔符,javascript,node.js,Javascript,Node.js,执行类似于Java的System.getProperty(“line.separator”)是否存在于JavaScript中 编辑:我使用的是非浏览器JavaScript环境节点。js不是由标准定义的,否。为JavaScript程序的源代码定义行终止符(有四个),但与平台为文本定义行终止符无关 如果您谈论的是非浏览器环境(shell脚本、基于服务器的JavaScript等),我会查看您运行的环境(NodeJS、Rhino等)的文档,希望这些文档能够为您提供此类环境信息。(当然,在Rhino中,您

执行类似于Java的
System.getProperty(“line.separator”)是否存在于JavaScript中


编辑:我使用的是非浏览器JavaScript环境节点。js

不是由标准定义的,否。为JavaScript程序的源代码定义行终止符(有四个),但与平台为文本定义行终止符无关

如果您谈论的是非浏览器环境(shell脚本、基于服务器的JavaScript等),我会查看您运行的环境(NodeJS、Rhino等)的文档,希望这些文档能够为您提供此类环境信息。(当然,在Rhino中,您可以只使用Java。)

如果您谈论的是基于浏览器的环境,大体上来说,
\n
是被使用的,但“大体上”这一点会影响您。:-)一些浏览器甚至会在JavaScript看到行尾之前转换行尾,比如在
textarea
中。例如,的原始版本中根本没有回车符。但是,如果您在Internet Explorer中运行该页面,请注意,该页面表示在文本区域的值中找到了
\r
字符。Chrome或Firefox(即使在Windows上运行)并非如此,但Opera也添加了它们(即使在*nix上运行)。因此,在浏览器上,当访问多行字段值时,我倾向于通过
str=str.replace(/(?:\r\n | \r)+/g,“\n”)对行结尾进行“规范化”,以防万一。(这假设
\r
本身以及后跟
\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";
}
函数getLineBreakSequence(){ 变量div,ta,text; div=document.createElement(“div”); div.innerHTML=“一个\n两个”; ta=第一个孩子; text=ta.value; 返回文本。indexOf(“\r”)>=0?\r\n:“\n”; }
这是因为使用
\r\n
的浏览器在解析HTML字符串时会动态转换
\n
。下面是一个你可以自己尝试使用你最喜欢的浏览器的方法



更新:啊,你在使用NodeJS。遗憾的是,像你一样,我在NodeJS文档中没有看到任何关于这一点的内容。NodeJS与C/C++的关系非常密切,在C/C++中,无论以文本模式打开的OS-on流是什么,您都可以使用
\n
进行换行,它会动态转换为特定于OS的版本(读写)。但是我看不到NodeJS中对文本模式文件流的任何支持。
fs.open
函数不记录
fopen
中的
b
标志(这是它获得标志语法的地方),如果查看源代码,它将显示在MinGW上。所有这些都让我怀疑,文件永远只处于二进制模式。为换行符使用
\n
,这是值得的。

有些浏览器使用
\n
,有些浏览器使用
\r\n
。如果要拆分换行符上的文本,请使用以下命令:

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

没有。RegExp中有换行符(\n)和回车符(\r),但没有类似“line.separator”属性的内容。如果我们谈论的是客户端js。

最好在。。。等等。。。堆栈溢出!其中问题包括一个确定换行符的函数,此处链接的答案提供了一种检测平台的方法,然后推断出平台敏感换行符,以便在pre或textarea中使用


另外,您可以在这里找到一个很好的解释,说明在pre和textarea之外,JavaScipt如何将所有行分隔符转换为
\n

我遇到了同样的问题,并且遇到了这个非常老的问题。经过一段时间的投资,我终于在文档的最后找到了
os.EOL

var os = require('os')
console.log(JSON.stringify(os.EOL)) // prints "\n" on my Mac
JSON.stringify在本例中很重要,否则您只能在控制台中看到一个空行(这很有意义,因为它应该这样做)。在正常的用例中,它是不需要的。

这为我做到了(尽管我首先偶然发现了这个问题)

函数getLineBreakSequence(){ 变量div,ta,text; div=document.createElement(“div”); div.innerHTML=“一个\n两个”; ta=第一个孩子; text=ta.value; 返回文本。indexOf(“\r”)>=0?\r\n:“\n”; }

这里的问题集中在Node.js的使用上,但这个答案很好地描述了跨浏览器和跨平台的情况。

啊,我应该澄清一下,我说的确实是非浏览器环境。我正在使用NodeJS。我将尝试在文档中查找它,我还没有考虑到这一点(如果你不知道的话,我对这个很陌生)。除此之外,感谢您提供的所有精彩信息!回答得好!+2按钮在哪里?我在文档中找不到任何东西,所以答案似乎是否定的(要么是否定的,要么是我没有找到正确的位置)。谢谢你的帮助!很抱歉,我应该澄清一下(我在上面做了一个编辑),我使用的是名为Node.js的非浏览器JavaScript环境。我问这个问题时不知道这是否存在,但现在看来这肯定是正确的答案。谢谢你的帮助@tdashroy我想补充一点,如果您处理的文件不一定来自同一操作系统,那么您可以在大多数文本操作函数中使用常规表达式,例如
String.split()
String.replace()
,等等。。。使用
/\r\n |\n/
进行此操作。路径分隔符的可能副本为冒号或分号。它与新的行分隔符不同。请参见路径分隔符为斜杠或反斜杠。但是行分隔符可以是“\n”、“\r\n”或“\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";
}