如何用<br />标签替换字符串中的所有换行符?

Jin*_*ong 503 javascript

如何使用Javascript从值读取换行符并用<br />标签替换所有换行符?

例:

从PHP传递的变量如下:

  "This is man.

     Man like dog.
     Man like to drink.

     Man is the king."
Run Code Online (Sandbox Code Playgroud)

在Javascript转换后,我希望我的结果看起来像这样:

  "This is man<br /><br />Man like dog.<br />Man like to drink.<br /><br />Man is the king."
Run Code Online (Sandbox Code Playgroud)

eye*_*ess 1126

这会将所有返回值转换为HTML

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

如果你想知道什么?:意味着.它被称为非捕获组.这意味着括号内的正则表达式组不会保存在内存中以便稍后引用.您可以查看这些线程以获取更多信息:
https ://stackoverflow.com/a/11530881/5042169 /sf/answers/2556718881/

  • 另外注意:`str.replace("\n",'<br />')`(第一个参数是常规字符串)将仅替换第一次出现. (73认同)
  • 另一个版本(替换多个换行符):str.replace(/(\n)+/g,'<br />'); (16认同)
  • @SergeS.感谢您的额外评论.刚救了我一个时间![的jsfiddle](http://jsfiddle.net/yPSEZ/7/) (4认同)
  • @SergeS.,`String#replace`将其第一个参数从`String`强制转换为转义的`RegExp`实例,没有标志.`str.replace('\n','<br />');`相当于`str.replace(new RegExp('\n'),'<br />');` (4认同)
  • 这是一个与`str.split(“ \ n”)。join(“ &lt;br /&gt;”)`进行比较的测试用例。http://jsperf.com/split-join-vs-replace-regex RegEx看起来速度稍快 (2认同)
  • @Clonkex 使用 `?:` 将匹配组中的任何内容,但不返回它,而匹配的其余表达式将返回,这在某些情况下很有用,但我实际上没有看到使用它的区别在这里,因为没有返回任何内容,只是替换了 ̫\_(ツ)_/̵ (2认同)

ber*_*ing 351

如果你关注的只是显示换行符,你可以用CSS做到这一点.

HTML

<div class="white-space-pre">Some test
with linebreaks</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.white-space-pre {
    white-space: pre-wrap;
}
Run Code Online (Sandbox Code Playgroud)

jsfiddle https://jsfiddle.net/yk1angkz/125/

Note: Pay attention to code formatting and indenting, since white-space: pre-wrap will display all whitespaces (except for the last newline after the text, see fiddle).

  • 很棒的答案......需要更多的升级! (55认同)
  • 而不是`white-space:pre-wrap;`我更喜欢使用`white-space:pre-line;`(毕竟不添加最后的断行) (17认同)
  • 我来这里寻找正则表达式并留下了这个.在很多场合,这是人们正在寻找的东西.我们对电子邮件使用换行符,有时需要显示电子邮件在html中看起来的内容.PERFECTO.感谢您以不同的眼光看待这个问题 (11认同)
  • 看起来不错但是在第一线之前的巨大空间怎么样?奇怪的 (4认同)
  • @jpmottin我认为你的版本更接近问题作者正在寻找的内容,所以我也将我的答案更改为“white-space: pre-line”。谢谢你! (4认同)

pau*_*r19 70

没有正则表达式:

str = str.split("\n").join("<br />");
Run Code Online (Sandbox Code Playgroud)

  • @CrowderSoup嗯?我只是尝试了它并且`\\n`在新行上不匹配,因为它正在寻找`反斜杠`+`n`. (9认同)
  • 如果您执行“\\n”,您将避免仅在“n”上拆分的问题。 (2认同)
  • 我做了一个测试用例。正则表达式稍快一些,但请自行查看 http://jsperf.com/split-join-vs-replace-regex (2认同)
  • @ACOMIT001我想这取决于字符串是否有换行符或黑斜杠和n? (2认同)

WSk*_*ner 36

这适用于来自textarea的输入

str.replace(new RegExp('\r?\n','g'), '<br />');
Run Code Online (Sandbox Code Playgroud)


Afa*_*kin 11

支持最常见的EOL 样式 \r\n以及\r\n使用 HTML5 的最短代码<br>

s.replace(/\r?\n|\r/g, '<br>')
Run Code Online (Sandbox Code Playgroud)


Jet*_*son 7

如果接受的答案不适合您,那么您可以尝试.

str.replace(new RegExp('\n','g'), '<br />')
Run Code Online (Sandbox Code Playgroud)

它对我有用.

  • `new RegExp('\n', 'g')` 与 `/\n/g` 相同(除了一些关于使用原始文字与其构造函数的细节)。 (2认同)
  • 无论什么原因,这对我有用,但接受的答案却没有 (2认同)

小智 7

无论系统如何:

my_multiline_text.replace(/$/mg,'<br>');
Run Code Online (Sandbox Code Playgroud)


Dmi*_*gin 6

对文本的其余部分进行编码以防止可能的脚本注入攻击也很重要

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'));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Dr.*_*hno 5

当值来自文本框时,这对我有用:

string.replace(/\n|\r\n|\r/g, '<br/>');
Run Code Online (Sandbox Code Playgroud)