2011-04-06 20 views
9

Decir que tengo esta sola cadena, aquí denotan espacios (" ") con^Recortar los espacios finales antes de los saltos de línea en una cadena de múltiples líneas sola en JavaScript

^^quick^^^\n 
^brown^^^\n 
^^fox^^^^^\n 

Qué expresión regular a utilizar para eliminar los espacios finales con .replace()? usando replace(/\s+$/g, "") no es realmente útil, ya que sólo elimina los espacios en la última línea con el "zorro".

Pasando por otras preguntas, encontré que replace(/\s+(?:$|\n)/g,"") coincide con las secciones correctas pero también elimina los nuevos caracteres de línea, pero los necesito.

Así, el resultado será perfecto:

^^quick\n 
^brown\n 
^^fox\n 

(sólo espacios finales se eliminan todo lo que queda en otro)

Respuesta

14

Agregar el modificador 'm' multilínea.

replace(/\s+$/gm, "") 

O todavía más rápido ...

replace(/\s\s*$/gm, "") 

¿Por qué es más rápido? Ver: Faster JavaScript Trim

Adición: La expresión anterior tiene el efecto potencialmente no deseado de comprimir líneas nuevas adyacentes. Si este no es el comportamiento deseado a continuación, se prefiere el siguiente patrón:

replace(/[^\S\r\n]+$/gm, "") 

Editado 17/11/2013: - Se ha añadido el patrón alternativo que no comprime las nuevas líneas consecutivas. (Gracias a Dalgard para señalar a cabo esta deficiencia.)

+0

parece tener el efecto secundario no deseado de reducir múltiples saltos de línea a uno? – dalgard

+0

@dalgard - Estás en lo cierto. La respuesta ahora se actualiza con un patrón alternativo que no tiene este efecto adverso. ¡Gracias por señalar esto! – ridgerunner

+1

¿Qué tal si quisiera incluir espacios iniciales en 'replace (/ [^ \ S \ r \ n] + $/gm," ")'? –

Cuestiones relacionadas