Jak zastąpić wszystkie wystąpienia ciągu znaków w JavaScript?

Mam ten ciąg:

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

Robienie

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

Wydaje się usuwać tylko pierwsze wystąpienie abc w powyższym łańcuchu. Jak mogę zastąpić wszystkie zdarzenia?

Author: Lamy, 2009-07-17

30 answers

Ze względu na kompletność, zacząłem myśleć o tym, jaką metodę powinienem użyć, aby to zrobić. Istnieją zasadniczo dwa sposoby, aby to zrobić, jak sugerują inne odpowiedzi na tej stronie.

Uwaga: ogólnie rzecz biorąc, rozszerzenie wbudowanych prototypów w JavaScript nie jest zalecane. Dostarczam jako rozszerzenia na prototypie łańcucha znaków po prostu dla celów ilustracji, pokazując różne implementacje hipotetycznej standardowej metody na wbudowanym String prototyp.


Implementacja Oparta Na Wyrażeniach Regularnych

String.prototype.replaceAll = function(search, replacement) {
    var target = this;
    return target.replace(new RegExp(search, 'g'), replacement);
};

Podziel i połącz (funkcjonalną) implementację

String.prototype.replaceAll = function(search, replacement) {
    var target = this;
    return target.split(search).join(replacement);
};

Nie wiedząc zbyt wiele o tym, jak wyrażenia regularne działają za kulisami pod względem wydajności, skłaniałem się ku podziałowi i dołączałem do implementacji w przeszłości, nie myśląc o wydajności. Kiedy zastanawiałem się, który jest bardziej wydajny i na jakim marginesie, użyłem go jako pretekstu, aby się dowiedzieć.

Na moim Chrome Windows 8 maszyna, implementacja oparta na wyrażeniach regularnych jest najszybsza , przy czym implementacja split I join jest o 53% wolniejsza. Oznacza to, że wyrażenia regularne są dwa razy szybsze dla wejścia Lorem ipsum, którego użyłem.

Zobacz też benchmark uruchamianie tych dwóch implementacji przeciwko sobie.


Jak zauważono w komentarzu poniżej przez @ ThomasLeduc i innych, może wystąpić problem z implementacją opartą na wyrażeniach regularnych if search zawiera pewne znaki, które są zarezerwowane jako znaki specjalne w wyrażeniach regularnych . Implementacja zakłada, że wywołujący będzie wcześniej unikał ciągu znaków lub przekaże tylko ciągi, które są bez znaków w tabeli w wyrażenia regularne (MDN).

MDN dostarcza również implementację do ucieczki naszych ciągów. Byłoby miło, gdyby było to również znormalizowane jako RegExp.escape(str), ale niestety nie istnieje:

function escapeRegExp(str) {
  return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
}

Moglibyśmy wywołanie escapeRegExp w naszej implementacji String.prototype.replaceAll, jednak nie jestem pewien, jak bardzo wpłynie to na wydajność (potencjalnie nawet dla ciągów, dla których escape nie jest potrzebny, jak wszystkie ciągi alfanumeryczne).

 1752
Author: Cory Gross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 21:55:56
str = str.replace(/abc/g, '');

W odpowiedzi na komentarz:

var find = 'abc';
var re = new RegExp(find, 'g');

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

W odpowiedzi na kliknij w komentarz , możesz go jeszcze bardziej uprościć:

function replaceAll(str, find, replace) {
    return str.replace(new RegExp(find, 'g'), replace);
}

Uwaga: wyrażenia regularne zawierają znaki specjalne (meta) i jako takie niebezpieczne jest ślepe przekazywanie argumentu w powyższej funkcji find bez wstępnego przetwarzania go w celu uniknięcia tych znaków. Jest to omówione w Mozilla Developer Network 'S JavaScript Guide on Regular Expressions, gdzie przedstaw następującą funkcję użytkową:

function escapeRegExp(str) {
    return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}

Tak więc aby powyższa funkcja replaceAll() była bezpieczniejsza, można ją zmodyfikować do następującej wartości, jeśli dołączysz również escapeRegExp:

function replaceAll(str, find, replace) {
    return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}
 3686
Author: Sean Bright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-21 22:17:14

Uwaga: nie używaj tego w prawdziwym kodzie.

Jako alternatywa dla wyrażeń regularnych dla prostego ciągu literalnego, możesz użyć

str = "Test abc test test abc test...".split("abc").join("");

Ogólny wzór to

str.split(search).join(replacement)

W niektórych przypadkach było to szybsze niż użycie replaceAll i wyrażenia regularnego, ale wydaje się, że nie ma to już miejsca w nowoczesnych przeglądarkach. Tak więc, to powinno być używane tylko jako szybki hack, aby uniknąć konieczności ucieczki wyrażenia regularnego, a nie w prawdziwym kodzie.

 1207
Author: Matthew Crumley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-24 14:38:59

Użycie wyrażenia regularnego z zestawem znaczników g zastąpi wszystkie:

someString = 'the cat looks like a cat';
anotherString = someString.replace(/cat/g, 'dog');
// anotherString now contains "the dog looks like a dog"

Zobacz też

 519
Author: Adam A,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-17 12:15:25

Oto prototypowa funkcja string oparta na zaakceptowanej odpowiedzi:

String.prototype.replaceAll = function (find, replace) {
    var str = this;
    return str.replace(new RegExp(find, 'g'), replace);
};

EDIT

Jeśli Twoje find będzie zawierało znaki specjalne, musisz przed nimi uciec:

String.prototype.replaceAll = function (find, replace) {
    var str = this;
    return str.replace(new RegExp(find.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'g'), replace);
};

Http://jsfiddle.net/cdbzL/

 92
Author: jesal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-07 16:40:16

aktualizacja:

Jest trochę późno na aktualizację, ale ponieważ właśnie natknąłem się na to pytanie i zauważyłem, że moja poprzednia odpowiedź nie jest taka, z której jestem zadowolony. Ponieważ pytanie dotyczyło zastąpienia jednego słowa, To niesamowite, że nikt nie pomyślał o użyciu granic słów(\b)

'a cat is not a caterpillar'.replace(/\bcat\b/gi,'dog');
//"a dog is not a caterpillar"

Jest to prosty regex, który unika zastępowania części słów w większości przypadków. Jednak myślnik - jest nadal uważany za granicę słowa. Tak więc warunki mogą być stosowane w ten przypadek, aby uniknąć zastąpienia ciągów takich jak cool-cat:

'a cat is not a cool-cat'.replace(/\bcat\b/gi,'dog');//wrong
//"a dog is not a cool-dog" -- nips
'a cat is not a cool-cat'.replace(/(?:\b([^-]))cat(?:\b([^-]))/gi,'$1dog$2');
//"a dog is not a cool-cat"

Zasadniczo to pytanie jest takie samo jak pytanie tutaj: JavaScript zamień "'" na "" "

@Mike, sprawdź odpowiedź, którą tam dałem... regexp nie jest jedynym sposobem na zastąpienie wielu wystąpień subsrtingu, z dala od niego. Myśl elastyczna, myśl rozdzielona!

var newText = "the cat looks like a cat".split('cat').join('dog');

Alternatywnie, aby zapobiec wymianie części wyrazów-co zrobi również zatwierdzona odpowiedź! Możesz obejść ten problem za pomocą wyrażenia regularne, które są, przyznaję, nieco bardziej złożone i jako wynik tego, nieco wolniejsze, też: {]}

var regText = "the cat looks like a cat".replace(/(?:(^|[^a-z]))(([^a-z]*)(?=cat)cat)(?![a-z])/gi,"$1dog");

Wyjście jest takie samo jak zaakceptowana odpowiedź, jednak przy użyciu wyrażenia /cat/g na tym łańcuchu:

var oops = 'the cat looks like a cat, not a caterpillar or coolcat'.replace(/cat/g,'dog');
//returns "the dog looks like a dog, not a dogerpillar or cooldog" ?? 

UPS rzeczywiście, to prawdopodobnie nie jest to, czego chcesz. Więc co? IMHO, regex który tylko warunkowo zastępuje "kota". (tzn. nie jest częścią słowa), jak tak:

var caterpillar = 'the cat looks like a cat, not a caterpillar or coolcat'.replace(/(?:(^|[^a-z]))(([^a-z]*)(?=cat)cat)(?![a-z])/gi,"$1dog");
//return "the dog looks like a dog, not a caterpillar or coolcat"
Myślę, że to odpowiada twoim potrzebom. Oczywiście nie jest w pełni odporny, ale powinien wystarczy, żeby zacząć. Polecam przeczytać więcej na tych stronach. To okaże się przydatne w doskonaleniu tej ekspresji do konkretnych potrzeb.

Http://www.javascriptkit.com/jsref/regexp.shtml

Http://www.regular-expressions.info


Ostatni dodatek:

Biorąc pod uwagę, że to pytanie wciąż ma wiele wyświetleń, pomyślałem, że mogę dodać przykład .replace używany z funkcją callback. W tym przypadku znacznie upraszcza wyrażenie i zapewnia jeszcze większą elastyczność, jak zastąpienie prawidłową kapitalizacją lub zastąpienie obu cat i cats za jednym zamachem:

'Two cats are not 1 Cat! They\'re just cool-cats, you caterpillar'
   .replace(/(^|.\b)(cat)(s?\b.|$)/gi,function(all,char1,cat,char2)
    {
       //check 1st, capitalize if required
       var replacement = (cat.charAt(0) === 'C' ? 'D' : 'd') + 'og';
       if (char1 === ' ' && char2 === 's')
       {//replace plurals, too
           cat = replacement + 's';
       }
       else
       {//do not replace if dashes are matched
           cat = char1 === '-' || char2 === '-' ? cat : replacement;
       }
       return char1 + cat + char2;//return replacement string
    });
//returns:
//Two dogs are not 1 Dog! They're just cool-cats, you caterpillar
 75
Author: Elias Van Ootegem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:36

Dopasowanie do globalnego wyrażenia regularnego:

anotherString = someString.replace(/cat/g, 'dog');
 51
Author: scronide,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-06 23:23:40
str = str.replace(/abc/g, '');

Lub spróbuj funkcji replaceAll stąd:

Jakie są użyteczne metody JavaScript rozszerzające obiekty wbudowane?

str = str.replaceAll('abc', ''); OR

var search = 'abc';
str = str.replaceAll(search, '');

EDIT: Wyjaśnienie o dostępności zamienników

Metoda 'replaceAll' jest dodawana do prototypu String. Oznacza to, że będzie on dostępny dla wszystkich obiektów string/literałów.

Np.

var output = "test this".replaceAll('this', 'that');  //output is 'test that'.
output = output.replaceAll('that', 'this'); //output is 'test this'
 35
Author: SolutionYogi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:57

Powiedz, że chcesz zastąpić wszystkie " abc "przez " x":

let some_str = 'abc def def lom abc abc def'.split('abc').join('x')
console.log(some_str) //x def def lom x x def

Próbowałem pomyśleć o czymś prostszym niż zmodyfikowanie prototypu string.

 30
Author: Emilio Grisolía,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 22:01:59

Użyj wyrażenia regularnego:

str.replace(/abc/g, '');
 27
Author: Donnie DeBoer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 21:56:32

Zastępowanie pojedynczych cudzysłowów:

function JavaScriptEncode(text){
    text = text.replace(/'/g,''')
    // More encode here if required

    return text;
}
 25
Author: Chris OnDaRocks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-17 15:53:28

//loop it until number apparences comes to 0. Lub po prostu skopiuj / wklej

    function replaceAll(find, replace, str) 
    {
      while( str.indexOf(find) > -1)
      {
        str = str.replace(find, replace);
      }
      return str;
    }
 22
Author: Raseela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-05 14:01:12

To jest najszybsza wersja , która nie używa wyrażeń regularnych .

Poprawione jsperf

replaceAll = function(string, omit, place, prevstring) {
  if (prevstring && string === prevstring)
    return string;
  prevstring = string.replace(omit, place);
  return replaceAll(prevstring, omit, place, string)
}

Jest prawie dwa razy tak szybki jak metoda split and join.

Jak wspomniano w komentarzu tutaj, to nie będzie działać, jeśli Twoja omit zmienna zawiera place, jak w: replaceAll("string", "s", "ss"), ponieważ zawsze będzie w stanie zastąpić inne wystąpienie tego słowa.

Jest jeszcze jeden jsperf z wariantami na moim rekurencyjnym zastępowaniu, które idą nawet faster ( http://jsperf.com/replace-all-vs-split-join/12)!

  • aktualizacja 27 lipca 2017: wygląda na to, że RegExp ma teraz najszybszą wydajność w niedawno wydanej Chrome 59.
 20
Author: Cole Lawrence,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-27 15:57:56
str = str.replace(new RegExp("abc", 'g'), "");

Zadziałało dla mnie lepiej niż powyższe odpowiedzi. tak więc new RegExp("abc", 'g') tworzy Wyrażenie regularne, które pasuje do wszystkich znaczników occurence ('g') w tekście ("abc"). Druga część to to, co zostaje zastąpione, w Twoim przypadku empty string (""). {[5] } jest łańcuchem znaków i musimy go nadpisać, ponieważ replace(...) po prostu zwraca wynik, ale nie nadpisuje. W niektórych przypadkach możesz chcieć tego użyć.

 19
Author: csomakk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-29 17:52:40
function replaceAll(str, find, replace) {
  var i = str.indexOf(find);
  if (i > -1){
    str = str.replace(find, replace); 
    i = i + replace.length;
    var st2 = str.substring(i);
    if(st2.indexOf(find) > -1){
      str = str.substring(0,i) + replaceAll(st2, find, replace);
    }       
  }
  return str;
}
 15
Author: Tim Rivoli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-29 19:17:45

Jeśli to, co chcesz znaleźć jest już w łańcuchu, a nie masz pod ręką escapera regex, możesz użyć join / split:

    function replaceMulti(haystack, needle, replacement)
    {
        return haystack.split(needle).join(replacement);
    }

    someString = 'the cat looks like a cat';
    console.log(replaceMulti(someString, 'cat', 'dog'));
 14
Author: rakslice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-23 17:42:33
var str = "ff ff f f a de def";
str = str.replace(/f/g,'');
alert(str);

Http://jsfiddle.net/ANHR9/

 12
Author: pkdkk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-04 10:01:17
while (str.indexOf('abc') !== -1)
{
    str = str.replace('abc', '');
}
 12
Author: zdennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-29 10:25:12

Użycie RegExp W JavaScript może wykonać zadanie za ciebie, po prostu zrób coś takiego jak poniżej:

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

Jeśli myślisz o ponownym użyciu, Utwórz funkcję, aby to zrobić za ciebie, ale nie jest to zalecane, ponieważ jest to tylko jedna funkcja liniowa, ale ponownie, jeśli mocno się z tego skorzystasz, możesz napisać coś takiego:

String.prototype.replaceAll = String.prototype.replaceAll || function(string, replaced) {
  return this.replace(new RegExp(string, 'g'), replaced);
};

I po prostu używaj go w kodzie w kółko jak poniżej:

var str ="Test abc test test abc test test test abc test test abc";
str = str.replaceAll('abc', '');

Ale jak wspomniałem wcześniej, nie zrobi to wielkiej różnicy pod względem linii, aby być pisanie lub wydajność, tylko buforowanie funkcji może wpłynąć na szybszą wydajność długich łańcuchów, a także dobrą praktykę suchego kodu, jeśli chcesz ponownie użyć.

 11
Author: Alireza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-12 05:57:29

Podoba mi się ta metoda (wygląda trochę czyściej):

text = text.replace(new RegExp("cat","g"), "dog"); 
 10
Author: Owen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 21:57:29

Jeśli łańcuch zawiera podobny wzór jak abccc, możesz użyć tego:

str.replace(/abc(\s|$)/g, "")
 10
Author: mostafa elmadany,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-27 08:49:49

Jeśli próbujesz upewnić się, że szukany ciąg znaków nie istnieje nawet po zastąpieniu, musisz użyć pętli.

Na przykład:

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

Kiedy ukończysz, nadal będziesz miał "testowe abc"!

Najprostsza pętla do rozwiązania to:

var str = 'test aabcbc';
while (str != str.replace(/abc/g, '')){
   str.replace(/abc/g, '');
}
/ Align = "left" / Być może (narażone na przegłosowanie), które można połączyć w nieco bardziej efektywną, ale mniej czytelną formę:
var str = 'test aabcbc';
while (str != (str = str.replace(/abc/g, ''))){}
// alert(str); alerts 'test '!

To może być szczególnie przydatne przy szukaniu duplikatów łańcuchów.
Na przykład, jeśli mamy 'a,,, b' i chcemy usunąć wszystkie zduplikowane przecinki.
[W takim razie można to zrobić .replace ( / , + / g,','), ale w pewnym momencie regex staje się złożony i wystarczająco powolny, aby zamiast tego zapętlić.]

 9
Author: SamGoody,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-28 19:58:42
var string  = 'Test abc Test abc Test abc Test abc'
string = string.replace(/abc/g, '')
console.log(string)
 9
Author: Ashutosh Narang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-09 09:41:05

Możesz spróbować połączyć te dwie potężne metody.

"test abc test test abc".split("abc").join("")
Mam nadzieję, że to pomoże!
 7
Author: Victor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-09 15:04:23

Możesz po prostu użyć poniższej metody

/**
 * Replace all the occerencess of $find by $replace in $originalString
 * @param  {originalString} input - Raw string.
 * @param  {find} input - Target key word or regex that need to be replaced.
 * @param  {replace} input - Replacement key word
 * @return {String}       Output string
 */
function replaceAll(originalString, find, replace) {
  return originalString.replace(new RegExp(find, 'g'), replace);
};
 7
Author: tk_,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-23 03:47:11

Chociaż ludzie wspominali o użyciu regex, ale jest lepsze podejście, jeśli chcesz zastąpić tekst niezależnie od przypadku tekstu. Jak wielkie lub małe litery. Użyj poniższej składni

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

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

Możesz odnieść się do szczegółowego przykładu tutaj .

 7
Author: Cheezy Code,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-08 18:51:40

Po prostu wykonaj ten regex oneliner dodając wielkość liter, więc jeśli zrobisz "ABC", to będzie działać tak samo jak dla "abc".

str = str.replace(/abc/gi, "");
 7
Author: Ankit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-17 12:58:22

Po prostu dodaj /g

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

Do

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

/g oznacza globalny

 6
Author: Reza Fahmi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-15 12:13:18

Działa dla mnie następująca Funkcja:

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);
} ;

Teraz wywołaj funkcje w następujący sposób:

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

Po prostu skopiuj i wklej ten kod w konsoli przeglądarki, aby przetestować.

 6
Author: Sandeep Gantait,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-16 09:53:06

Używam p do przechowywania wyniku z poprzedniej rekurencji:

function replaceAll(s, m, r, p) {
    return s === p || r.contains(m) ? s : replaceAll(s.replace(m, r), m, r, s);
}

Zastąpi wszystkie wystąpienia w łańcuchu s aż będzie to możliwe:

replaceAll('abbbbb', 'ab', 'a') → 'abbbb' → 'abbb' → 'abb' → 'ab' → 'a'

Aby uniknąć nieskończonej pętli sprawdzam czy zamiennik r zawiera dopasowanie m :

replaceAll('abbbbb', 'a', 'ab') → 'abbbbb'
 5
Author: Termininja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 05:45:24