Comment puis-je lire le saut de ligne d'une valeur avec JavaScript et remplacer tous les sauts de ligne par des <br />
éléments?
Exemple:
Une variable passée de PHP comme ci-dessous:
"This is man.
Man like dog.
Man like to drink.
Man is the king."
J'aimerais 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."
javascript
Jin Yong
la source
la source
Réponses:
Cela transformera tous les retours en HTML
Si vous vous demandez quoi?: Signifie. Il s'agit d'un groupe non capturant. Cela signifie que le groupe d'expressions régulières entre parenthèses ne sera pas enregistré en mémoire pour être référencé plus tard. Vous pouvez consulter ces discussions pour plus d'informations:
https://stackoverflow.com/a/11530881/5042169 https://stackoverflow.com/a/36524555/5042169
la source
str.replace("\n", '<br />')
(le premier argument est une chaîne régulière) ne remplacera que la première occurrence.String#replace
Contraint son premier argument deString
à uneRegExp
instance d' échappement, sans indicateur.str.replace('\n', '<br />');
équivaut àstr.replace(new RegExp('\n'), '<br />');
str.split("\n").join("<br />")
jsperf.com/split-join-vs-replace-regex RegEx semble légèrement plus rapideSi votre souci est simplement d'afficher des sauts de ligne, vous pouvez le faire avec CSS.
Jsfiddle: https://jsfiddle.net/5bvtL6do/2/
Remarque : Faites attention au formatage et à l'indentation du code, car
white-space: pre-line
affichera tous les retours à la ligne (sauf le dernier retour à la ligne après le texte, voir violon).la source
white-space: pre-wrap;
je préfère utiliserwhite-space: pre-line;
(pour ne pas ajouter de ligne de rupture finale après tout)Sans regex:
la source
\\n
ne correspond pas sur une nouvelle ligne, car il recherchebackslash
+n
.Cela fonctionne pour les entrées provenant d'une zone de texte
la source
Si la réponse acceptée ne vous convient pas, vous pouvez essayer.
Ça a marché pour moi.
la source
new RegExp('\n', 'g')
est identique à/\n/g
(à l'exception de quelques détails sur l'utilisation des littéraux primitifs par rapport à leurs constructeurs)./\n/g
une chaîne!Quel que soit le système:
la source
Il est également important de coder le reste du texte afin de se protéger d'éventuelles attaques par injection de script
la source
Cela a fonctionné pour moi lorsque la valeur provenait d'une zone de texte:
la source
Pour ceux d'entre vous qui veulent juste permettre max. 2
<br>
d'affilée, vous pouvez utiliser ceci:Première ligne: recherchez
\n
OU\r\n
où au moins 2 d'entre eux sont consécutifs, par exemple\n\n\n\n
. Puis remplacez-le par 2br
Deuxième ligne: recherchez tous les single
\r\n
ou\n
remplacez-les par<br>
la source
si vous envoyez la variable depuis PHP, vous pouvez l'obtenir avec ceci avant d'envoyer:
la source
str = str.replace(/\n/g, '<br>')
str = str.replace(/\n*\n/g, '<br>')
la source
str = str.replace(/\n+/g, '<br>')
pour le deuxième casNe répondant pas à la question spécifique, mais je suis sûr que cela aidera quelqu'un ...
Si vous avez une sortie de PHP que vous souhaitez rendre sur une page Web en utilisant JavaScript (peut-être le résultat d'une demande Ajax), et que vous souhaitez simplement conserver les espaces blancs et les sauts de ligne, pensez simplement à enfermer le texte dans un
<pre></pre>
bloc:la source
Essayer
la source