문자열의 모든 줄 바꿈을 <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)을 수행 할 수도 있습니다.
alex

1
나는 더 좋은 예를 가지고 있기 때문에 앞의 질문을 끝내기 위해 투표 할 것입니다.
eyelidlessness 2009

2
그는 초기 질문을 편집해야합니다
nickf

나는 .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

4
@SergeS. 추가 의견에 감사드립니다. 시간을 절약했습니다! jsfiddle
EleventyOne

4
@SergeS. String#replace는 플래그없이 첫 번째 인수를 String이스케이프 된 RegExp인스턴스 로 강제 변환합니다 . str.replace('\n', '<br />');str.replace(new RegExp('\n'), '<br />');
eyelidlessness

2
다음은 str.split("\n").join("<br />") jsperf.com/split-join-vs-replace-regex와 비교 한 테스트 사례입니다. 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

1
테스트 케이스를 만들었습니다. RegEx는 약간 빠르지 만 스스로 확인하십시오. jsperf.com/split-join-vs-replace-regex
Aley

슬래시를 이스케이프하지 않으면이 답변이 효과가 없다는 것을 알았습니다. 예를 들면 다음과 같습니다. str = str.split ( "\ n"). join ( "<br />");
ACOMIT001

@ ACOMIT001 문자열에 줄 바꿈이 있는지 아니면 블랙 슬래시와 n이 있는지 여부에 따라 다릅니다.
paulslater19


8

수락 된 답변이 제대로 작동하지 않으면 시도해 볼 수 있습니다.

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

그것은 나를 위해 일했다.


2
new RegExp('\n', 'g')/\n/g(원시 리터럴과 그 생성자를 사용하는 것에 대한 일부 축소를 제외하고 )와 동일합니다 .
eyelidlessness

2
이유가 무엇이든간에 이것은 나를 위해 일했지만 받아 들인 대답은 그렇지 않았습니다.
nick

1
아, 여기 동일하지만 내 실수는 /\n/g문자열 로 지정하려고했습니다 !
Daniel Fortunov 2015 년

7

시스템에 관계없이 :

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

1
주의 : '\ n'이 있는지 여부에 관계없이 문자열에 '<br>'태그가 추가됩니다.
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>');

첫 번째 줄 : 둘 중 하나 이상이 행에있는 \nOR을 검색하십시오 ( \r\n예 :) \n\n\n\n. 그런 다음 2로 교체하십시오.br

두 번째 줄 : 모든 단일 검색 \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>')두 번째 경우에 이와 같은 정규식을 사용할 수도 있습니다.
Matteo Basso

0

특정 질문에 대답하지 않지만 이것이 누군가 를 도울 것이라고 확신합니다 ...

JavaScript (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.