Из исходного вопроса SO Как заменить все вхождения строки в JavaScript?
Например, если у меня есть такая строка:
var str = "Test abc test test abc test test test abc test test abc";
и я делаю:
str = str.replace('abc', '');
Он удаляет только первое вхождение abc
, как удалить все подстроки abc
?
Короткий ответ
Использовать регулярные выражения (RegExp) с параметром g, глобальный поиск
Фрагмент
Наблюдения
Регулярные выражения не являются тривиальными, поскольку определенные символы влияют на способ интерпретации регулярного выражения. Их обработка должна применяться только к защищенным строкам, или они должны быть экранированы перед обработкой. Вот более полный пример.
Шрифт
Ответ на Как заменить все вхождения строки в JavaScript?
Смотрите также
String.replace() принимает строку или объект RegExp в качестве первого параметра .
Если вы хотите заменить все
"abc"
, все, что вам нужно сделать, это использовать регулярное выражение с модификатором/g
( global ), который указывает, что все вхождения заменяются.И если вы хотите игнорировать регистр, используйте модификатор
/i
( ignore case ):Общий случай:
То же самое можно перенести на общий случай, чтобы заменить любую подстроку и экранировать все специальные символы.
Расширение прототипов исходных типов (
built-in prototype
) не рекомендуется, но чтобы показать другое решение, я приведу пример того, как это сделать, изменив прототипString
.Реализация на основе регулярных выражений
Реализация на основе разделения и объединения (функционально)
Он будет использоваться следующим образом:
Примечание: не используйте этот метод в реальном коде.
Альтернативой регулярным выражениям может быть:
Общая схема такова:
Раньше в некоторых случаях это было быстрее, чем использование
protoypes
и регулярных выражений, но, похоже, это не так в современных браузерах. Поэтому это следует использовать только как быстрое исправление, чтобы избежать экранирования регулярных выражений, но не для фактического кода, который будет запущен в производство.