Cómo reemplazar \n con en JavaScript?

4 minutos de lectura

avatar de usuario de eugeneK
eugenio

Tengo un área de texto donde inserto \n cuando el usuario presiona enter. El código de esta área de texto se envía a un servicio WCF a través de jQuery.ajax(). no puedo guardar \n en la base de datos, ya que no se mostrará en otras aplicaciones que consuman el servicio.

¿Cómo puedo reemplazar \n con <br /> ¿etiqueta?

solución

Bueno, muchos de ustedes lo intentaron y algunos acertaron con Javascript Regex con /g (modificador global). Al final, \n inserté dos veces, no sé por qué, mi única suposición es que jQuery en el evento de pulsación de tecla creó el doble \n que depuré.

$('#input').keypress(function (event) {
    if (event.which == '13') {
        inputText = $('#input').val() + '\n';
        $('#input').val(inputText);
    }
});

  • por lo general, no es una buena idea reemplazarlo en el lado del cliente

    – Teneff

    13 de junio de 2011 a las 14:40

  • @Teneff, \n no se envía entonces al servidor, parece omitido. Puedo cambiarlo en el servidor pero no recibo nada excepto texto.

    – eugeneK

    13 de junio de 2011 a las 14:42

  • También debe almacenarlo en el formato sin formato ingresado, si alguna vez agregó una nueva aplicación para recuperar datos que podrían admitir el /n, entonces seguramente debería mostrarlo. has probado a codificarlo?

    – jimplode

    13 de junio de 2011 a las 14:43


  • es #input un <input type="text"/>? porque si lo es no te va a salir ninguna \n. Si es un área de texto, le sugiero que convierta los datos cuando el usuario haga clic en el botón para enviar y no cuando escriba. Pero mejor que eso, simplemente convertiría en el lado del servidor.

    – BrunoLM

    13 de junio de 2011 a las 15:18

  • @BrunoLM, #input es textarea y reemplazo \n a :br: en el envío y cambio :br: a la etiqueta br html cuando obtengo datos del servidor. ¿Por qué no lo estoy haciendo en el servidor porque además de las etiquetas br tengo imágenes y la etiqueta de la imagen es bastante larga para enviar a través del servicio al envoltorio jQuery, así que marco las etiquetas que necesito con dos puntos, al igual que los foros hacen eso con [tagname]

    – eugeneK

    13 de junio de 2011 a las 17:51

Reemplazar con alcance global

$('#input').val().replace(/\n/g, "<br />")

o

$('#input').val().replace("\n", "<br />", "g")

  • reemplaza bien globalmente pero reemplaza dos veces la etiqueta br al presionar una tecla

    – eugeneK

    13 de junio de 2011 a las 14:50

Avatar de usuario de Teneff
Teneff

se podría hacer así:

$('textarea').val().replace(/\n/g, "<br />");

editar: lo siento … las expresiones regulares en javascript no deben citarse

ejemplo de trabajo

  • No funciona ya que quiere reemplazar \n y no /\n/. Y si estaba destinado a ser una expresión regular, solo reemplazaría la primera aparición.

    – BrunoLM

    13 de junio de 2011 a las 14:45

  • @Qtax, reemplaza solo la primera aparición de \n y omite otros

    – eugeneK

    13 de junio de 2011 a las 14:47

  • Simplemente use un reemplazo de cadena, como "\n"si realmente quieres usar expresiones regulares, puedes hacerlo /\n/g.

    – Qtax

    13 de junio de 2011 a las 14:48

avatar de usuario de rzetterberg
rzetterberg

Como se dijo en los comentarios y otras respuestas, es mejor hacerlo en el lado del servidor.

Sin embargo, si desea saber cómo hacerlo en el lado del cliente, esta es una solución fácil:

textareaContent.replace(/\\n/g, "<br />");

Dónde textareaContent es la variable con los datos en el área de texto.

Editar: Cambiado para que reemplace globalmente y no solo el primer partido.

  • Reemplaza solo la primera aparición de \n

    – eugeneK

    13 de junio de 2011 a las 14:45

Si es compatible con PHP, debe comprobar esto: http://php.net/manual/en/function.nl2br.php

Puede usar una función de cadena de javascript simple.

 string.replace("\n", "<br>")

Avatar de usuario de Senad Meškin
Senad Meškin

puede usar la función de reemplazo incorporada de javascript con un poco de ayuda de expresiones regulares, por ejemplo

$('#input').val().replace(/\n\r?/g, '<br />')

este código devolverá todas las entradas reemplazadas con <br>

Avatar de usuario de Richard Friend
amigo ricardo

Desde dentro de su servicio WCF, ¿no puede simplemente usar String.Replace ?

text = text.Replace("\n","<br />");

  • ¡No hagas esto! Debe usar una expresión regular para reemplazar todas las coincidencias globalmente. Por ejemplo, en su caso, solo reemplazará la primera aparición

    – Karue Benson Karue

    3 abr 2020 a las 23:44

¿Ha sido útil esta solución?