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, который заменяет все совпадения на новое значение. Он особенно удобен, когда нужно заменить один и тот же фрагмент во всей строке без дополнительных приёмов.