Learn JavaScript

replaceAll() - метод для замены всех совпадений в строке в JavaScript

replaceAll() заменяет все совпадения в строке на новое значение.

Это удобный метод, когда нужно заменить не только первое, а сразу все вхождения текста.

Синтаксис

str.replaceAll(pattern, replacement)

Где:

  • pattern - строка или регулярное выражение
  • replacement - строка или функция

Метод возвращает новую строку.

Как работает replaceAll()

const text = "ha ha ha";

console.log(text.replaceAll("ha", "ho")); // "ho ho ho"

В отличие от replace(), здесь заменяются сразу все совпадения.

Исходная строка не меняется

Строки в JavaScript неизменяемы, поэтому replaceAll() не изменяет исходное значение.

const text = "Hello world world";
const result = text.replaceAll("world", "JS");

console.log(text);   // "Hello world world"
console.log(result); // "Hello JS JS"

replaceAll() со строкой

Если в первом аргументе передана обычная строка, метод заменит все её вхождения.

const text = "1,2,3,4";

console.log(text.replaceAll(",", ";")); // "1;2;3;4"

Это один из самых частых сценариев использования replaceAll().

replaceAll() с регулярным выражением

replaceAll() умеет работать и с регулярным выражением, но есть важное правило: у regex должен быть флаг g.

const text = "ha ha ha";

console.log(text.replaceAll(/ha/g, "ho")); // "ho ho ho"

Если передать regex без g, JavaScript выбросит ошибку.

// "ha ha".replaceAll(/ha/, "ho"); // TypeError

replaceAll() с функцией

Во втором аргументе можно передать не только строку, но и функцию.

const text = "1 2 3";

const result = text.replaceAll(/\d/g, (match) => String(Number(match) * 2));

console.log(result); // "2 4 6"

Это полезно, когда новое значение нужно вычислить для каждого совпадения.

Когда это полезно

replaceAll() удобно использовать, когда:

  • нужно заменить все одинаковые фрагменты строки
  • хочется написать более понятный код, чем через regex в replace()
  • требуется очистить или нормализовать текст

Пример:

const phone = "8 (999) 123-45-67";
const cleaned = phone.replaceAll("-", "");

console.log(cleaned); // "8 (999) 1234567"

replaceAll() и replace()

replace() без глобального regex заменяет только первое совпадение.

const text = "ha ha ha";

console.log(text.replace("ha", "ho"));    // "ho ha ha"
console.log(text.replaceAll("ha", "ho")); // "ho ho ho"

Если нужно заменить все вхождения, replaceAll() обычно читается проще.

При этом replace() тоже может заменить всё, если использовать regex с флагом g:

const text = "ha ha ha";

console.log(text.replace(/ha/g, "ho"));    // "ho ho ho"
console.log(text.replaceAll("ha", "ho"));  // "ho ho ho"

Частые ошибки

Ожидать, что replaceAll() работает с regex без g

// "ha ha".replaceAll(/ha/, "ho"); // TypeError

Для регулярного выражения у replaceAll() обязательно нужен флаг g.

Забывать, что исходная строка не меняется

let text = "a-b-c";

text.replaceAll("-", "_");
console.log(text); // "a-b-c"

Нужно сохранить результат:

let text = "a-b-c";

text = text.replaceAll("-", "_");
console.log(text); // "a_b_c"

Путать replaceAll() и replace()

const text = "ha ha ha";

console.log(text.replace("ha", "ho"));    // "ho ha ha"
console.log(text.replaceAll("ha", "ho")); // "ho ho ho"

Если нужно заменить все вхождения, replaceAll() подходит лучше.

Быстрая памятка

  • replaceAll(pattern, replacement) заменяет все совпадения
  • метод возвращает новую строку
  • исходная строка не меняется
  • со строкой заменяются все вхождения сразу
  • для regex у replaceAll() обязателен флаг g

Коротко

replaceAll() - это метод строки в JavaScript, который заменяет все совпадения на новое значение. Он особенно удобен, когда нужно заменить один и тот же фрагмент во всей строке без дополнительных приёмов.