permítanme abordar aquellos en orden inverso:
Lo que estoy haciendo mal?
Quiere usar +
, no *
. *
significa cero o más coincidencias, lo cual no tiene sentido aquí. +
significa una o más coincidencias. Por lo tanto:
"aaa\nbbb\nccc".replace(/.+/g, ".")
// ".\n.\n."
También tenga en cuenta que si usted no está usando ^
o $
(el primer ejemplo), no es necesario el modificador m
(pero que no era el problema con lo que estaba haciendo). Y no necesita ^
o $
porque .
doesn't match newlines (algo que no sabía antes de responder a esta pregunta).
¿Por qué javascript replace string function hace esto?
No tengo ninguna idea terrenal y espero que alguien más lo haga.
Nuevamente, al usar *
dice cero o más coincidencias. Por lo tanto, coincide con todos los personajes relevantes, reemplazándolos por el primer punto; luego coincide con cero caracteres, reemplazándolos con un punto. Resultado: dos puntos.
Prueba:
Live copy | Live source
"aaa\nbbb\nccc".replace(/.*/g, function(m) {
console.log("m = '" + m + "'");
});
Salidas:
m = 'aaa'
m = ''
m = 'bbb'
m = ''
m = 'ccc'
m = ''
Me encanta la "fuente en vivo". Gran explicación –
Gran explicación, esto merece + a_lot. No sabía que '.' tampoco coincidía con las líneas nuevas. –