Pozwól mi rozwiązać te w odwrotnej kolejności:
Co robię źle?
Chcesz użyć +
, a nie *
. *
oznacza zero lub więcej pasuje, co nie ma sensu tutaj. +
oznacza jeden lub więcej dopasowań. Więc:
"aaa\nbbb\nccc".replace(/.+/g, ".")
// ".\n.\n."
Należy również pamiętać, że jeśli nie używasz ^
lub $
(Twój pierwszy przykład), nie trzeba modyfikator m
(ale to nie był problem z tym, co robisz). I nie potrzebujesz ^
lub $
ponieważ .
doesn't match newlines (coś, czego nie wiedziałem przed udzieleniem odpowiedzi na to pytanie).
Dlaczego funkcja javascript zastępuje funkcję string?
Nie mam ziemskiego pomysłu i mam nadzieję, że ktoś inny to robi.
Ponownie, używając *
mówisz zero lub więcej dopasowań. Więc pasuje do wszystkich odpowiednich znaków, zastępując je pierwszą kropką; następnie pasuje do zero znaków, zastępując je jedną kropką. Wynik: dwie kropki.
Dowód:
Live copy | Live source
"aaa\nbbb\nccc".replace(/.*/g, function(m) {
console.log("m = '" + m + "'");
});
Wyjścia:
m = 'aaa'
m = ''
m = 'bbb'
m = ''
m = 'ccc'
m = ''
Uwielbiam "źródło na żywo". Świetne wyjaśnienie. –
Świetne wyjaśnienie, to zasługuje na + a_lot. Nie wiedziałem, że '.' nie pasuje również do nowych znaków. –