76 votes

jQuery javascript regex Remplacer <br>par \n

Comment puis-je écrire une regex pour remplacer <br /> o <br> avec \n . J'essaie de déplacer le texte d'un div vers un textarea, mais je ne veux pas <br> à afficher dans la zone de texte, je veux donc les remplacer par \n .

0 votes

Quel langage côté serveur utilisez-vous ? si php alors nl2br() est la fonction u nécessaire

196voto

Teneff Points 6753
var str = document.getElementById('mydiv').innerHTML;
document.getElementById('mytextarea').innerHTML = str.replace(/<br\s*[\/]?>/gi, "\n");

ou en utilisant jQuery :

var str = $("#mydiv").html();
var regex = /<br\s*[\/]?>/gi;
$("#mydiv").html(str.replace(regex, "\n"));

exemple

éditer : ajouté i drapeau

edit2 : vous pouvez utiliser /<br[^>]*>/gi qui correspondra à tout ce qui se trouve entre le br y slash si vous avez par exemple <br class="clear" />

2 votes

Cela fonctionne mais je viens de remarquer qu'IE6,7,8 affiche le capital. <BR> Comment faire pour que cela fonctionne avec les minuscules et les majuscules ?

1 votes

Je pense que c'est censé être mis dans un textarea.

2 votes

@Pinkie vous pouvez ajouter i pour insensible à la casse

12voto

Adam Bergmark Points 2337

myString.replace(/<br ?\/?>/g, "\n")

0 votes

Cela ne fonctionnera pas s'il y a plus d'un espace entre les éléments suivants br et la barre oblique

1 votes

@teneff Il n'y a normalement pas plus d'un espace, mais cela peut être facilement résolu avec une *

7voto

Radek Pech Points 452

La vraie méthode jQuery si vous voulez modifier directement le DOM sans toucher au HTML interne :

$('#text').find('br').prepend(document.createTextNode(' \n ')).remove() ;

Prepend insère à l'intérieur de l'élément, before() est la méthode dont nous avons besoin ici :

$('#text').find('br').before(document.createTextNode('\n')).remove();

Le code trouvera tous les éléments <br>, insérera du texte brut avec un caractère de nouvelle ligne, puis supprimera les éléments <br>.

Cela devrait être plus rapide si vous travaillez avec des textes longs puisqu'il n'y a pas d'opérations sur les chaînes de caractères ici.

Pour afficher les nouvelles lignes :

$('#text').css('white-space', 'pre-line');

5voto

James Khoury Points 5433

Un bon marché et méchant serait :

jQuery("#myDiv").html().replace("<br>", "\n").replace("<br />", "\n")

EDIT

jQuery("#myTextArea").val(
    jQuery("#myDiv").html()
        .replace(/\<br\>/g, "\n")
        .replace(/\<br \/\>/g, "\n")
);

J'ai également créé un jsfiddle si nécessaire : http://jsfiddle.net/2D3xx/

1 votes

Doit passer "g" comme troisième arg pour remplacer

0 votes

@adam Opps ! J'ai manqué ça. Merci adam. De plus, la regex dans votre réponse est plus robuste.

0 votes

Parfois une simple erreur se produit comme : Certains peuvent utiliser "</br>", dans ce cas utilisez replace(/< \s *\\N- Br>/ig, " \r\n ")

2voto

RobG Points 41170

Cela n'a pas grand-chose à voir avec jQuery, mais si vous voulez couper un motif dans une chaîne, utilisez une expression régulière :

<textarea id="ta0"></textarea>
<button onclick="
  var ta = document.getElementById('ta0');
  var text = 'some<br>text<br />to<br/>replace';
  var re = /<br *\/?>/gi;
  ta.value = text.replace(re, '\n');
">Add stuff to text area</button>

0 votes

Parfois une simple erreur se produit comme : Certains peuvent utiliser "</br>", dans ce cas utilisez replace(/< \s *\\N- Br>/ig, " \r\n ")

0 votes

@eegloo- </br> est une erreur simple. Strictement, elle fermera toute balise ouvrante précédente, mais les navigateurs semblent être stupidement tolérants et la convertissent en <br> . De plus, le PO n'a pas demandé cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X