Позвольте мне обратиться к ним в обратном порядке:
Что я делаю не так?
Вы хотите использовать +
, а не *
.*
означает ноль или более совпадений, что здесь не имеет смысла.+
означает один или несколько совпадений .Итак:
"aaa\nbbb\nccc".replace(/.+/g, ".")
// ".\n.\n."
Также обратите внимание, что если вы не используете ^
или $
(ваш первый пример), вам не нужен модификатор m
(но это был непроблема с тем что ты делал).И вам не нужно ^
или $
, потому что .
не соответствует символам новой строки (что я не знал до ответа на этот вопрос).
Почему javascript заменяет строковую функцию?
У меня нет никаких земных идей, и я надеюсь, что кто-то другой делает.
Опять же, используя *
говорите ноль или более совпадений.Таким образом, он соответствует всем соответствующим символам, заменяя их первой точкой;затем он соответствует нулю символов, заменяя их одной точкой.Результат: две точки.
Пруф:
Живая копия | Живой источник
"aaa\nbbb\nccc".replace(/.*/g, function(m) {
console.log("m = '" + m + "'");
});
Выходы:
m = 'aaa'
m = ''
m = 'bbb'
m = ''
m = 'ccc'
m = ''