Una forma sencilla de eliminar los espacios en blanco en mi caso es hacer esto:
<textarea id="thetext" lines="8" style="width: 100%; height: 8em;"> hello, how are you i'm fine And i hope the same from you </textarea><br> <button onclick="whitespaces()">Vanish</button> <script> function whitespaces() { var input = document.getElementById("thetext"); input.value = input.value .replace(/\t{1,}/g, "") .replace(/\n{3,}/g, '\n\n') .replace(/ {1,}/g, ' ') .replace(/^ /gm, '') .replace(/ $/gm, '') .replace(/^\n{1,}/g, '') .replace(/\n{1,}$/g, ''); } </script>Sin embargo, estoy tratando de lograr el mismo objetivo con una condición negativa. Eso es usando menos o algo así. Como soy nuevo en js, no estoy familiarizado con las condiciones negativas. Entonces, ¿alguien puede decirme cómo usar la condición negativa en este caso? El código debería ser algo como esto:
function whitespaces() { var input = document.getElementById("thetext"); input.value = input.value.replace(all whitespaces [\s] minus linebreak [\n] and paragraph breaks [\n\n]) }SOLUCIÓN 1
Puede usar la siguiente expresión regular para hacer coincidir todos los caracteres de espacio en blanco excepto las líneas nuevas.
[^\S\r\n]Es decir, no-no-espacio en blanco (la S mayúscula complementa) o no-retorno de carro o no-nueva línea. Distribuyendo el not externo (es decir, el complemento ^ en la clase de caracteres) con la ley de De Morgan, esto es equivalente a "espacio en blanco pero no retorno de carro o nueva línea". La inclusión de \r y \n en el patrón maneja correctamente todas las convenciones de nueva línea de Unix (LF), Mac OS clásico (CR) y DOS-ish (CR LF).
De esta respuesta de stackoverflow .
SOLUCIÓN 2
En javascript, también puede usar una función de reemplazo para verificar cada coincidencia y devolver la cadena de reemplazo solo si cumple ciertas condiciones. La función de reemplazo aquí verifica cada espacio en blanco si es un salto de línea.
<textarea id="thetext" lines="8" style="width: 100%; height: 8em;"> hello, how are you i'm fine And i hope the same from you </textarea><br> <button onclick="whitespaces()">Vanish</button> <script> function whitespaces() { var input = document.getElementById("thetext"); var inputVal = input.value; inputVal = inputVal.replace(/\s/g, function(match){ return match === '\n' ? match : ''; }); input.value = inputVal; } </script>SOLUCIÓN 3
Otra posible solución es reemplazar primero todos los saltos de párrafo y saltos de línea por algún texto falso (sin espacios en blanco). Luego haga el reemplazo de espacios en blanco. Después de eso, vuelva a convertir los textos falsos en saltos de párrafo y de línea. (Tenga en cuenta que dado que los párrafos son saltos de línea dobles, no necesita reemplazar la línea con el salto de párrafo).
<textarea id="thetext" lines="8" style="width: 100%; height: 8em;"> hello, how are you i'm fine And i hope the same from you </textarea><br> <button onclick="whitespaces()">Vanish</button> <script> function whitespaces() { var input = document.getElementById("thetext"); var inputVal = input.value; inputVal = inputVal.replace(/\n\n/g, "somebogustextforparagraphbreaks"); inputVal = inputVal.replace(/\n/g, "somebogustextforlinebreaks"); inputVal = inputVal.replace(/\s{1,}/g, ""); inputVal = inputVal.replace(/somebogustextforparagraphbreaks/g, "\n\n"); inputVal = inputVal.replace(/somebogustextforlinebreaks/g, "\n"); input.value = inputVal; } </script>