web-dev-qa-db-ja.com

JavaScriptの文字列の改行文字?

\nはすべてのプラットフォームにとってJavascriptのユニバーサル改行文字シーケンスですか?そうでない場合は、現在の環境の性格をどのように判断すればよいですか?

HTMLの改行要素(<BR/>)については質問していません。 JavaScriptの文字列内で使用されている改行文字シーケンスについて質問しています。

381
Landon Kuhn

私はちょうどこの愚かなJavaScriptを使っていくつかのブラウザをテストしました:

function log_newline(msg, test_value) {
  if (!test_value) { 
    test_value = document.getElementById('test').value;
  }
  console.log(msg + ': ' + (test_value.match(/\r/) ? 'CR' : '')
              + ' ' + (test_value.match(/\n/) ? 'LF' : ''));
}

log_newline('HTML source');
log_newline('JS string', "foo\nbar");
log_newline('JS template literal', `bar
baz`);
<textarea id="test" name="test">

</textarea>

Windows上のIE8とOpera 9は\r\nを使用します。私がテストした他のすべてのブラウザ(WindowsではSafari 4とFirefox 3.5、LinuxではFirefox 3.0)は\nを使用しています。 IEとOperaは内部的にそれを再び\nに変換しますが、それらはすべて\r\nを値を設定するときにうまく処理できます。 Javascriptの改行コード と呼ばれるSitePointの記事があります。

これはHTMLファイル自体の実際の行末とは無関係であることにも注意してください(\n\r\nの両方が同じ結果を与えます)。

フォームを送信するとき、すべてのブラウザはURLエンコーディングで改行を%0D%0Aに正規化できます。それを見るには、例えばdata:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form>をクリックして送信ボタンを押します。 (ブラウザによっては送信されたページの負荷をブロックすることがありますが、URLエンコードされたフォーム値をコンソールに表示できます。)

私はあなたが本当に何でも決定することの多くをする必要があるとは思わない。テキストを改行で分割したいだけの場合は、次のようにします。

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

はい、それは普遍的です。

'\n'はユニバーサル 改行 文字ですが、入力によっては改行文字の前にキャリッジリターン文字('\r')が付くことに注意してください。

80
Sinan Taifour

使わないでください。

    var string = "this\
    is a multi\
    line\
    string";

ただバックスラッシュを入力してtrackinを続けてください。魅力のように働きます。

57
Qasim

どの行をチェックしてから適用するのではなく、単にすべての行改行文字を処理するのが最も簡単な場合があります。たとえば、改行を置き換える必要がある場合は、次の手順を実行します。

htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");
49
Quincy

はい、<br />を使いたいHTMLコードを生成しているのでなければ、\ nを使ってください。

22
Finer Recliner

メールリンク機能「%0D%0A」を使用しています

function sendMail() {   
var bodydata="Before "+ "%0D%0A";
    bodydata+="After"

var MailMSG = "mailto:[email protected]" 
         + "[email protected]" 
         + "&subject=subject" 
         + "&body=" + bodydata; 
window.location.href = MailMSG; 
} 

[HTML]

<a href="#" onClick="sendMail()">Contact Us</a>
13
ISCI

現在のブラウザの行区切り文字を取得します。

function getLineSeparator() {
  var textarea = document.createElement("textarea");
  textarea.value = "\n"; 
  return textarea.value;
}
6

注意 - ExtendScript JavaScript(Photoshop CS3 +などのアプリケーションで使用されるAdobe Scripting言語)を使用する場合、使用する文字は "\ r"です。 "\ n"はフォント文字として解釈されるので、多くのフォントは代わりにブロック文字を持ちます。

たとえば( 'Note'という名前のレイヤーを選択し、すべての期間の後に改行を追加する):

var layerText = app.activeDocument.artLayers.getByName('Note').textItem.contents;
layerText = layerText.replace(/\. /g,".\r");
4
JayCrossler

ES6では ``引用符(Escボタンの下)を使うことができます。だからあなたはこのようなものを書くことができます:

var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;
1
Bogdan Surai

改行を \n または \r\n で表現するという問題がありました。
魔法のように復帰改行に使われる \r という文字が改行のように私には働きました。
したがって、場合によっては、\ rも考慮すると便利です。

1
Oralet

実際の観察... NodeJSスクリプトには、次の機能があります。

function writeToLogFile (message) {
    fs.appendFile('myserverlog.txt', Date() + " " + message + "\r\n", function (err) {
        if (err) throw err;
    });
}

最初は「\ n」しかありませんでしたが、メモ帳でログファイルを開くと、すべてのエントリが同じ行に表示されることに気付きました。一方、Notepad ++は、それぞれの行にエントリを表示します。コードを「\ r\n」に変更すると、メモ帳でもすべてのエントリが独自の行に表示されます。

0
user11717468

JS文字列を使って作業しているときは、そうだと思います。

ただし、HTMLを生成している場合は、<br />タグを使用する必要があります(JSを扱っていないので、\nではなく)

0
Pascal MARTIN
printAccountSummary: function()
        {return "Welcome!" + "\n" + "Your balance is currently $1000 and your interest rate is 1%."}
};
console.log(savingsAccount.printAccountSummary()); // method

プリント:

Welcome!
Your balance is currently $1000 and your interest rate is 1%.
0
Barbs G