Как заменить все вхождения строки в JavaScript - PullRequest
3824 голосов
/ 17 июля 2009

У меня есть эта строка:

"Test abc test test abc test test test abc test test abc"

Doing

str = str.replace('abc', '');

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

Ответы [ 55 ]

12 голосов
/ 07 октября 2017

Если строка содержит похожий шаблон, такой как abccc, вы можете использовать это:

str.replace(/abc(\s|$)/g, "")
12 голосов
/ 04 сентября 2013
var str = "ff ff f f a de def";
str = str.replace(/f/g,'');
alert(str);

http://jsfiddle.net/ANHR9/

11 голосов
/ 23 октября 2018

Предыдущие ответы слишком сложны. Просто используйте функцию замены следующим образом:

str.replace(/your_regex_pattern/g, replacement_string);

Пример:

var str = "Test abc test test abc test test test abc test test abc";

var res = str.replace(/[abc]+/g, "");

console.log(res);
9 голосов
/ 28 сентября 2014

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

Например:

var str = 'test aabcbc';
str = str.replace(/abc/g, '');

Когда закончите, у вас все еще будет 'test abc'!

Самый простой цикл для решения этой проблемы:

var str = 'test aabcbc';
while (str != str.replace(/abc/g, '')){
   str.replace(/abc/g, '');
}

Но это запускает замену дважды для каждого цикла. Возможно (рискуя быть отвергнутым), что может быть объединено для немного более эффективной, но менее читаемой формы:

var str = 'test aabcbc';
while (str != (str = str.replace(/abc/g, ''))){}
// alert(str); alerts 'test '!

Это может быть особенно полезно при поиске дублирующихся строк.
Например, если у нас есть «a ,,, b» и мы хотим удалить все повторяющиеся запятые.
[В этом случае можно сделать .replace (/, + / g, ','), но в какой-то момент регулярное выражение становится сложным и достаточно медленным, чтобы выполнять цикл.]

9 голосов
/ 03 мая 2016

Хотя люди уже упоминали об использовании регулярных выражений, но есть лучший подход, если вы хотите заменить текст независимо от его регистра Как прописные или строчные. Используйте ниже синтаксис

//Consider below example
originalString.replace(/stringToBeReplaced/gi, '');

//Output will be all the occurrences removed irrespective of casing.

Подробный пример можно посмотреть здесь .

8 голосов
/ 07 марта 2019

Я решил эту проблему с помощью простой строки кода.

str.replace(/Current string/g, "Replaced string");

Проверьте пример на jsfiddle https://jsfiddle.net/pot6whnx/1/

8 голосов
/ 29 мая 2019

Для замены однократного использования:

var res = str.replace('abc', "");

Для замены несколько раз используйте:

var res = str.replace(/abc/g, "");
7 голосов
/ 14 мая 2019

Простейший способ сделать это без использования регулярных выражений - это разделение и соединение, как показано здесь:

var str="Test abc test test abc test test test abc test test abc";
str.split('abc').join('')
7 голосов
/ 05 июня 2015

Просто добавьте /g

document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');

до

// Replace 'hello' string with /hello/g regular expression.
document.body.innerHTML = document.body.innerHTML.replace(/hello/g, 'hi');

/g означает глобальный

7 голосов
/ 16 февраля 2016

У меня работает следующая функция:

String.prototype.replaceAllOccurence = function(str1, str2, ignore)
{
    return this.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g,"\\$&"),(ignore?"gi":"g")),(typeof(str2)=="string")?str2.replace(/\$/g,"$$$$"):str2);
} ;

Теперь вызовите такие функции:

"you could be a Project Manager someday, if you work like this.".replaceAllOccurence ("you", "I");

Просто скопируйте и вставьте этот код в консоли браузера в TEST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...