2011-07-26 36 views
16

在JavaScript中是否存在類似於Java的System.getProperty("line.separator");JavaScript平臺獨立線路分隔符

編輯:我使用的非瀏覽器JavaScript環境的Node.js

+1

[如何確定JavaScript中的操作系統路徑分隔符?](http://stackoverflow.com/questions/125813/how-to-determine-the-os-path-separator-in-javascript) –

+0

路徑分隔符可以是冒號或分號。它與新行分隔符不同。請參閱https://stackoverflow.com/questions/5971964/file-separator-or-file-pathseparator –

回答

20

我有同樣的問題,碰到這個很老來了題。經過一段時間的投資後,我終於在os文檔的最後找到了os.EOL

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

JSON.stringify在這種情況下重要的,否則你只會在控制檯中看到一個空行(這是有道理的,因爲這是它應該做的)。在正常使用情況下,它不是必需的。

+1

不知道當我問這個問題時是否存在這個問題,但這絕對是正確的現在回答。感謝您的幫助! – tdashroy

+0

@tdashroy我想補充一點,如果你正在處理的文件不一定來自同一個操作系統,你可以在大多數文本處理函數中使用正則表達式,比如'String.split()','String。替換()',等等...... 使用'/ \ r \ n | \ n /'表示。 – Mario

15

無標準定義,沒有。 Section 7.3爲JavaScript程序的源代碼定義了行結束符(有四個),但沒有涉及到平臺定義的文本行結束符。

如果您在談論非瀏覽器環境(shell腳本,基於服務器的JavaScript等),我會查看您正在運行的環境的文檔(NodeJS,Rhino等)。 ),希望能爲你提供這種環境信息。 (在犀牛,當然,你可以使用Java的。)

如果你談論的是基於瀏覽器的環境中,通過\n被使用,但它是「由大」,可以咬您。 :-)甚至在JavaScript甚至看到它們之前,某些瀏覽器甚至會轉換行結尾,例如在textarea中。例如,this page的原始版本根本沒有回車。但是,如果您在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"; 
} 

這工作,因爲使用\r\n瀏覽器轉換\n解析HTML字符串時,在即時。這裏有一個live running copy,你可以用自己喜歡的瀏覽器自己嘗試。


更新:啊,你使用的NodeJS。不幸的是,和你一樣,我在NodeJS文檔中對這件事一無所知。 NodeJS與C/C++非常緊密地聯繫在一起,並且在C/C++中,無論在文本模式下打開的流上使用\n作爲linebreak,無論操作系統  —如何,它都會在運行時轉換爲特定於操作系統的版本(讀寫)。但是我沒有在NodeJS中看到對文本模式文件流的支持。 fs.open函數不記錄b標誌從fopen(否則它在哪裏得到該標誌的語法),並且如果你看看它的源碼,那麼在MinGW上它就是sets _fmode to _O_BINARY。所有這些都讓我懷疑文件只能以二進制模式運行。 console.log's implementation對換行符使用\n,這是值得的。

+0

啊,我應該澄清,我的確在談論非瀏覽器環境。我正在使用NodeJS。我會嘗試尋找它的文檔,我還沒有想過這個(如果你不明白,我對此很感興趣)。除此之外,感謝所有偉大的信息! – tdashroy

+0

很好的答案! +2按鈕在哪裏? –

+0

我在文檔中找不到任何東西,所以看起來答案是否定的(無論是我還是不在正確的位置)。謝謝你的幫助! – tdashroy

8

某些瀏覽器使用\n,有些使用\r\n。如果你想拆分新行上的文字只是使用這個:

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

沒有。在RegExp中有換行符(\ n)和回車符(\ r),但沒有像「line.separator」屬性那樣的東西。如果我們在談論客戶端js。

0

這是最好的回答...等待它... StackOverflow!如果問題包含確定換行符的函數,並且此處鏈接的答案提供了一種檢測平臺的方法,然後推斷在pre或textarea中使用的平臺敏感換行符。

In the browser, how does one determine which flavour of line breaks is appropriate to the OS?

此外,您還可以找到如何預先和文本區域外,javascipt的所有行分隔符轉換爲\n這裏一個很好的解釋:http://www.bennadel.com/blog/161-Ask-Ben-Javascript-Replace-And-Multiple-Lines-Line-Breaks.htm

+0

對不起,我應該澄清(我上面做了一個編輯)我正在使用非瀏覽器的JavaScript環境,名爲Node.js – tdashroy

0

這是爲我做的(雖然我偶然發現了這個問題)。

JavaScript Platform Independent Line separator

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的使用有集中的問題,但這個問題的答案說明了跨瀏覽器和跨平臺的良好局面。