2011-07-26 12 views
16

JavaScriptにJavaのSystem.getProperty("line.separator");と似たものはありますか?JavaScriptプラットフォーム独立型ラインセパレータ

編集:私はノー、標準で定義されていない

+1

[JavaScriptでOSのパス区切りを判別する方法]の複製がありますか?(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私は答えに追加したいのですが、必ずしも同じOSから来ていないファイルを処理している場合は、 'String.split()'、 'Stringのようなほとんどのテキスト操作関数でいつものexpresionsを使うことができます。 replace() 'など... '/\ r \ n | \ n/'を使ってください。 – Mario

15

Node.jsの非ブラウザのJavaScript環境を使用しています。 Section 7.3は、JavaScriptプログラムのソースコード(4つあります)の行終端文字を定義しますが、プラットフォームのテキストの行終端文字の定義には関係しません。

ブラウザ以外の環境(シェルスクリプト、サーバーベースのJavaScriptなど)については、実行している環境(NodeJS、Rhinoなど)のドキュメントを参照してください。 )、それはうまくいけば、あなたのためにそのような環境情報を持っています。 (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を使用していました。)

物事のブラウザ側を続けると、別のブラウザでも異なることを行うので、同じOS上で、彼らが何を使用しているかを知る方法はありますか?なぜ、そうあなたは卑劣なトリックを見つけることができ、そこにある:

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を使用するブラウザはオンザフライHTML文字列を解析するとき\nを変換するので、これは動作します。 live running copyは、お好みのブラウザで試してみることができます。


更新:ああ、あなたが使用しているNodeJS。残念ながら、あなたと同じように、NodeJSのドキュメントでは何も表示されません。 NodeJSはC/C++と非常に密接に結びついており、C/C++では、テキストモードでオープンされたストリームのOS番号  —に関係なく、改行には\nを使用します。 )。しかし、NodeJSのテキストモードファイルストリームはサポートされていません。 fs.open関数は、fopenからのbフラグを文書化していません(それ以外の場合は、そのフラグ構文を持っています)。ソースを見ると、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!質問には改行文字を決定する関数が1つ含まれており、ここにリンクされている答えはプラットフォームを検出し、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

申し訳ありませんが、私は明確にする必要があります(上記の編集を行いました)。私はNode.jsというブラウザ以外のJavaScript環境を使用しています – 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の使用に焦点を当てたが、その答えはよく、クロスブラウザ、クロスプラットフォームの状況を説明しています。

関連する問題