Вопрос проверяет знание методов replace и replaceAll для работы со строками в JavaScript, а также понимание различий в замене подстрок с использованием регулярных выражений.
Методы replace() и replaceAll() используются для замены подстрок в строке. Главное отличие заключается в количестве замен: replace() заменяет только первое совпадение, а replaceAll() — все совпадения.
Рассмотрим строку 'Hello, world! Hello, everyone!'. Если мы хотим заменить слово 'Hello' на 'Hi':
const str = 'Hello, world! Hello, everyone!';
console.log(str.replace('Hello', 'Hi')); // 'Hi, world! Hello, everyone!'
console.log(str.replaceAll('Hello', 'Hi')); // 'Hi, world! Hi, everyone!'Как видно, replace() заменяет только первое вхождение, а replaceAll() — все.
Оба метода поддерживают регулярные выражения. Однако replaceAll() требует, чтобы регулярное выражение имело флаг g (global), иначе будет выброшена ошибка TypeError. replace() же без флага g заменяет только первое совпадение, а с флагом g — все.
const str = 'cat, cat, dog';
console.log(str.replace(/cat/, 'mouse')); // 'mouse, cat, dog'
console.log(str.replace(/cat/g, 'mouse')); // 'mouse, mouse, dog'
console.log(str.replaceAll(/cat/g, 'mouse')); // 'mouse, mouse, dog'
// console.log(str.replaceAll(/cat/, 'mouse')); // TypeErrorИспользуйте replaceAll(), когда нужно заменить все вхождения подстроки или шаблона, и replace(), если требуется заменить только первое совпадение. replaceAll() делает код более читаемым и явным, особенно при работе с регулярными выражениями.