Bagaimana cara mengganti semua jeda baris dalam string dengan elemen <br />?


536

Bagaimana saya bisa membaca jeda baris dari nilai dengan JavaScript dan mengganti semua jeda baris dengan <br />elemen?

Contoh:

Variabel lulus dari PHP seperti di bawah ini:

  "This is man.

     Man like dog.
     Man like to drink.

     Man is the king."

Saya ingin hasil saya terlihat seperti ini setelah JavaScript mengubahnya:

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

1
Ada yang salah dengan pertanyaan awal Anda? stackoverflow.com/questions/784313/…
harto

1
Anda juga bisa melakukan nl2br ($ string) dalam PHP sebelum mengirimnya ke JavaScript.
Alex

1
Saya akan memilih untuk menutup pertanyaan sebelumnya, karena ini memiliki contoh yang lebih baik.
kelopak mata

2
Dia harus mengedit pertanyaan awal kemudian
nickf

Saya datang ke sini dari pemahaman yang salah arah terhadap apa yang sedang terjadi dengan .text (). Lihat stackoverflow.com/q/35238362/1467396 jika itu yang Anda lakukan juga
David

Jawaban:


1202

Ini akan mengubah semua pengembalian menjadi HTML

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

Jika Anda bertanya-tanya apa?: Artinya. Ini disebut grup yang tidak menangkap. Ini berarti bahwa grup regex di dalam tanda kurung tidak akan disimpan dalam memori untuk direferensikan nanti. Anda dapat memeriksa utas ini untuk informasi lebih lanjut:
https://stackoverflow.com/a/11530881/5042169 https://stackoverflow.com/a/36524555/5042169


77
Hanya catatan tambahan: str.replace("\n", '<br />')(argumen pertama adalah string biasa) akan menggantikan hanya kejadian pertama.
Serge S.

19
Versi lain (untuk mengganti beberapa jeda baris): str.replace (/ (\ n) + / g, '<br />');
Ritesh

4
@SergeS. Terima kasih atas komentar ekstra itu. Baru saja menyelamatkan saya TONNE waktu! jsfiddle
EleventyOne

4
@SergeS., Memaksakan String#replaceargumen pertamanya dari Stringke RegExpinstance yang lolos , tanpa tanda. str.replace('\n', '<br />');setara denganstr.replace(new RegExp('\n'), '<br />');
kelopak mata

2
Berikut ini adalah contoh kasus dibandingkan dengan str.split("\n").join("<br />") jsperf.com/split-join-vs-replace-regex RegEx tampaknya sedikit lebih cepat
Aley

391

Jika kekhawatiran Anda hanya menampilkan linebreak, Anda bisa melakukannya dengan CSS.

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

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

Catatan : Perhatikan pemformatan dan indentasi kode, karena white-space: pre-lineakan menampilkan semua baris baru (kecuali baris baru terakhir setelah teks, lihat biola).


59
Jawaban yang bagus ... membutuhkan lebih banyak perahu!
Ian Quigley

11
Saya datang ke sini mencari regex dan pergi dengan ini. Dalam banyak kesempatan inilah yang dicari orang. Kami menggunakan linebreak untuk surel dan terkadang perlu menampilkan apa yang tampak garis surel dalam html. Perfecto. Terima kasih telah melihat pertanyaan dengan cara yang berbeda
Mutmatt

1
Ini mungkin berfungsi untuk jeda baris aktual, tetapi bagaimana jika saya memiliki "\ n" seperti dalam pertanyaan? Bisakah saya menyelesaikan ini dengan CSS juga?
Froxx

18
Alih-alih white-space: pre-wrap;saya lebih suka menggunakan white-space: pre-line;(untuk tidak menambahkan garis istirahat akhir setelah semua)
jpmottin

5
terlihat bagus tapi bagaimana dengan ruang raksasa sebelum baris pertama? aneh
Toolkit

71

Tanpa regex:

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

2
Jika Anda melakukan "\\ n" Anda akan menghindari masalah dengan pemisahan hanya pada "n".
CrowderSoup

10
@CrowderSoup hmm? Saya baru saja mencobanya dan \\ntidak cocok dengan baris baru, karena sedang mencari backslash+ n.
paulslater19

1
Saya membuat test case. RegEx sedikit lebih cepat, tetapi periksa sendiri jsperf.com/split-join-vs-replace-regex
Aley

Saya menemukan jawaban ini tidak berfungsi kecuali tebasan itu lolos. Sebagai contoh: str = str.split ("\ n"). Join ("<br />");
ACOMIT001

@ ACOMIT001 Saya kira itu tergantung apakah string memiliki baris baru atau blackslash dan n?
paulslater19


8

Jika jawaban yang diterima tidak berfungsi untuk Anda, maka Anda dapat mencoba.

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

Ini berhasil untuk saya.


2
new RegExp('\n', 'g')identik dengan /\n/g(kecuali untuk beberapa hal kecil tentang penggunaan literal primitif versus konstruktornya).
kelopak mata

2
apa pun alasannya, ini berhasil bagi saya tetapi jawaban yang diterima tidak
nick

1
Ah, sama di sini ... tetapi kesalahan saya mencoba untuk menentukan /\n/gsebagai string!
Daniel Fortunov

7

Terlepas dari sistem:

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

1
Perhatian: Ini akan menambahkan tag '<br>' ke string apa pun, terlepas dari apakah ada '\ n' di dalamnya.
mkoeller

4

Penting juga untuk menyandikan sisa teks untuk melindungi dari kemungkinan serangan injeksi skrip

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'));
        }
    }
}

4

Ini bekerja untuk saya ketika nilai berasal dari TextBox:

string.replace(/\n|\r\n|\r/g, '<br/>');

2

Bagi Anda yang hanya ingin memperbolehkan maks. 2 <br>berturut-turut, Anda dapat menggunakan ini:

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

Baris pertama: Cari \nATAU \r\ndi mana setidaknya 2 dari mereka berturut-turut, misalnya \n\n\n\n. Kemudian gantilah dengan 2br

Baris kedua: Cari semua \r\natau \nganti dengan<br>


1

jika Anda mengirim variabel dari PHP, Anda bisa mendapatkannya dengan ini sebelum mengirim:

$string=nl2br($string);

0

Itu akan mengganti semua baris baru dengan break

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

Jika Anda ingin mengganti semua baris baru dengan satu baris break

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

Baca lebih lanjut tentang Regex: https://dl.icewarp.com/online_help/203030104.htm ini akan membantu Anda setiap saat.


Dimungkinkan juga untuk menggunakan regex seperti ini str = str.replace(/\n+/g, '<br>')untuk kasus kedua
Matteo Basso

0

Tidak menjawab pertanyaan spesifik, tetapi saya yakin ini akan membantu seseorang ...

Jika Anda memiliki output dari PHP yang ingin Anda render di halaman web menggunakan JavaScript (mungkin hasil dari permintaan Ajax), dan Anda hanya ingin mempertahankan spasi putih dan pemisah baris, pertimbangkan untuk menyertakan teks di dalam <pre></pre>blok:

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

0

Mencoba

let s=`This is man.

     Man like dog.
     Man like to drink.

     Man is the king.`;
     
msg.innerHTML = s.replace(/\n/g,"<br />");
<div id="msg"></div>

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.