文字列内のすべての改行を<br />要素に置き換えるにはどうすればよいですか?


536

JavaScriptで値から改行を読み取り、すべての改行を<br />要素で置き換えるにはどうすればよいですか?

例:

以下のようにPHPから渡される変数:

  "This is man.

     Man like dog.
     Man like to drink.

     Man is the king."

JavaScriptが変換した後の結果は次のようになります。

  "This is man<br /><br />Man like dog.<br />Man like to drink.<br /><br />Man is the king."

1
元の質問に問題がありますか?stackoverflow.com/questions/784313/...
harto

1
JavaScriptに送信する前に、PHPでnl2br($ string)を実行することもできます。
アレックス

1
これはより良い例なので、前の質問を閉じるために投票します。
まぶたがない2009

2
その後、彼は最初の質問を編集する必要があります
nickf '24

私は.text()で何が起こっているのかを誤解した理解からここに来ました。あなたもそうしている場合は、stackoverflow.com / q / 35238362/1467396を参照してください
David

回答:


1202

これはすべてのリターンをHTMLに変えます

str = str.replace(/(?:\r\n|\r|\n)/g, '<br>');

?:が何を意味するのか疑問に思われる場合。それは非捕獲グループと呼ばれます。つまり、括弧内の正規表現のグループは、後で参照するためにメモリに保存されません。詳細については、これらのスレッドをチェックしてください:
https : //stackoverflow.com/a/11530881/5042169 https://stackoverflow.com/a/36524555/5042169


77
ただ追加の注記:(str.replace("\n", '<br />')最初の引数は通常の文字列です)最初の出現のみを置き換えます。
Serge S.

19
別のバージョン(複数の改行を置き換える):str.replace(/(\ n)+ / g、 '<br />');
Ritesh 2013

4
@SergeS。その余分なコメントをありがとう。時間を節約してくれました!jsfiddle
EleventyOne

4
@SergeS。String#replaceは、最初の引数Stringを、RegExpフラグなしでエスケープされたインスタンスに強制します。str.replace('\n', '<br />');に相当str.replace(new RegExp('\n'), '<br />');
まぶたがない2014年

2
これはjsperf.com/split-join-vs-replace-regexと比較したテストケースstr.split("\n").join("<br />") です。RegExは少し高速に見えます
Aley

390

改行を表示するだけの場合は、CSSを使用してこれを行うことができます。

<div style="white-space: pre-line">Some test
with linebreaks</div>

Jsfiddle:https ://jsfiddle.net/5bvtL6do/2/

white-space: pre-lineすべての改行を表示するため、コードのフォーマットとインデントに注意してください(テキストの後の最後の改行を除きます。フィドルを参照)。


59
正解です...もっと多くのボートが必要です!
Ian Quigley

11
私は正規表現を探してここに来て、これを残しました。多くの場合、これは人々が探しているものです。私たちは電子メールに改行を使用しており、電子メールがhtmlで行のように見えたものを表示する必要がある場合があります。パーフェクト。別の観点から質問を見ていただきありがとうございます
Mutmatt

1
これは実際の改行で機能する可能性がありますが、質問に「\ n」がある場合はどうなりますか?これもCSSで解決できますか?
Froxx

18
代わりに (結局のところ最終的な改行を追加しないwhite-space: pre-wrap;ように)使用することを好むwhite-space: pre-line;
jpmottin

5
見た目は良いですが、最初の行の前の巨大なスペースはどうですか?奇妙な
ツールキット

71

正規表現なし:

str = str.split("\n").join("<br />");

2
「\\ n」を実行すると、「n」だけでの分割に関する問題が回避されます。
CrowderSoup

10
@CrowderSoupうーん?+を\\n探しているため、試してみましたが、新しい行では一致しません。backslashn
paulslater19 2012

1
テストケースを作りました。RegExの方が少し高速ですが、jsperf.com / split
Aley

スラッシュがエスケープされない限り、この回答は機能しませんでした。例:str = str.split( "\ n")。join( "<br />");
ACOMIT001 2015年

@ ACOMIT001文字列に改行があるか、または黒スラッシュとnがあるかによって異なりますね。
paulslater19

38

これはテキストエリアからの入力に対して機能します

str.replace(new RegExp('\r?\n','g'), '<br />');

1
あなたには、いくつかのシステムで使用されている\ rを、忘れていなかったので、それは私のために最良の答えだ
パルトロミエザレウスキー

1
これがこの質問に対する最良の答えです。しかし、私は<br>ではなく<br>を使用します。これをご覧ください
。stackoverflow.com/ questions / 1946426 / html

8

受け入れられた回答が正しく機能しない場合は、試してみてください。

str.replace(new RegExp('\n','g'), '<br />')

それは私のために働いた。


2
new RegExp('\n', 'g')と同じです/\n/g(ただし、プリミティブリテラルとそのコンストラクターの使用に関するいくつかの注意点を除く)。
まぶたのない2013年

2
理由が何であれ、これは私にとってはうまく
ニック

1
ああ、ここも同じです...しかし、私の間違いは/\n/g文字列として指定しようとしていました!
ダニエルフォルトゥノフ2013年

7

システムに関係なく:

my_multiline_text.replace(/$/mg,'<br>');

1
注意:これにより、文字列に「<br>」タグが追加されます。「\ n」が含まれているかどうかは関係ありません。
mkoeller

4

スクリプトインジェクション攻撃の可能性から保護するために、残りのテキストをエンコードすることも重要です

function insertTextWithLineBreaks(text, targetElement) {
    var textWithNormalizedLineBreaks = text.replace('\r\n', '\n');
    var textParts = textWithNormalizedLineBreaks.split('\n');

    for (var i = 0; i < textParts.length; i++) {
        targetElement.appendChild(document.createTextNode(textParts[i]));
        if (i < textParts.length - 1) {
            targetElement.appendChild(document.createElement('br'));
        }
    }
}


2

ちょうど最大を許可したい人のために。2 <br>行続けて、これを使用できます。

let text = text.replace(/(\r?\n){2,}/g, '<br><br>');
text = text.replace(/(\r?\n)/g, '<br>');

1行目:\nORを検索し\r\n、そのうちの少なくとも2つが連続している場合\n\n\n\n。次に2に置き換えますbr

2行目:すべての単一\r\nまたは\nを検索し、それらを<br>


1

PHPから変数を送信する場合、送信する前にこれで取得できます。

$string=nl2br($string);

0

新しい行をすべて改行で置き換えます

str = str.replace(/\n/g, '<br>')

すべての新しい行を単一の改行で置き換える場合

str = str.replace(/\n*\n/g, '<br>')

Regexの詳細については、https://dl.icewarp.com/online_help/203030104.htmを参照してください。 これはいつでも役立ちます。


str = str.replace(/\n+/g, '<br>')2番目のケースにこのような正規表現を使用することもできます
Matteo Basso

0

特定の質問には答えませんが、これは誰かを助けると確信しています...

JavaScriptを使用してWebページにレンダリングしたい(おそらくAjaxリクエストの結果)PHPからの出力があり、空白と改行を保持したいだけの場合は、テキストを<pre></pre>ブロック内で囲むことを検討してください。

var text_with_line_breaks = retrieve_some_text_from_php();
var element = document.querySelectorAll('#output');
element.innerHTML = '<pre>' + text_with_line_breaks + '</pre>';

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.