Comment remplacer tous les sauts de ligne dans une chaîne par des balises?

Comment puis-je lire le saut de ligne à partir d'une valeur avec Javascript et remplacer tous les sauts de ligne par des balises br?

Exemple:

Une variable passée de PHP comme ci-dessous:

  "This is man.

     Man like dog.
     Man like to drink.

     Man is the king."

Je voudrais que mon résultat ressemble à ceci après que le Javascript l'ait converti:

  "This is man<br /><br />Man like dog.<br />Man like to drink.<br /><br />Man is the king."
410
demandé sur mikemaccana 2009-04-24 08:38:11

10 réponses

Cela transformera tous les retours en HTML

str = str.replace(/(?:\r\n|\r|\n)/g, '<br>');
912
répondu eyelidlessness 2018-08-29 07:45:01

Si votre préoccupation affiche simplement des sauts de ligne, vous pouvez le faire avec CSS.

HTML

<div class="white-space-pre">Some test
with linebreaks</div>

CSS

.white-space-pre {
    white-space: pre-wrap;
}

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

Note : faites attention au formatage et à l'indentation du code, car white-space: pre-wrap affichera tous les espaces (sauf pour le dernier saut de ligne après le texte, voir fiddle).

263
répondu bersling 2017-11-10 11:03:29

Sans regex:

str = str.split("\n").join("<br />");
64
répondu paulslater19 2011-12-07 09:23:56

Cela fonctionne pour les entrées provenant d'une zone de texte

str.replace(new RegExp('\r?\n','g'), '<br />');
35
répondu WSkinner 2013-11-21 19:12:14

Si la réponse acceptée ne fonctionne pas correctement pour vous, vous pouvez essayer.

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

Ça a marché pour moi.

6
répondu Jethro Larson 2013-01-16 23:12:13

Quel que soit le système:

my_multiline_text.replace(/$/mg,'<br>');
5
répondu Michele Ongaro 2014-11-27 21:09:09

Il est également important d'encoder le reste du texte afin de se protéger contre d'éventuelles attaques par injection de script

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
répondu Dmitry Dzygin 2012-06-26 11:45:42

Pour ceux d'entre vous qui veulent juste permettre à max. 2 <br> dans une rangée, vous pouvez utiliser ceci:

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

Première ligne: Recherchez \n ou \r\n où au moins 2 d'entre eux sont dans une rangée, par exemple \n\n\n\n. Ensuite, remplacez-le par 2 br

Deuxième ligne: Recherchez tous les simples \r\n ou \n et remplacez-les par <br>

2
répondu Max 2017-03-03 17:47:50

Cela a fonctionné pour moi quand la valeur est venue d'une zone de texte:

string.replace(/\n|\r\n|\r/g, '<br/>');
1
répondu Dr. Aaron Dishno 2015-02-26 20:35:31

Si vous envoyez la variable depuis PHP, vous pouvez l'obtenir avec ceci avant d'envoyer:

$string=nl2br($string);
0
répondu Luca C. 2017-05-10 15:57:34