¿Cómo reemplazar todas las ocurrencias de una cadena en JavaScript?


Tengo esta cadena:

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

Haciendo

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

Parece eliminar solo la primera aparición de abc en la cadena anterior. ¿Cómo puedo reemplazar todas las ocurrencias?

Author: Lamy, 2009-07-17

30 answers

En aras de la integridad, me puse a pensar en qué método debo usar para hacer esto. Hay básicamente dos maneras de hacer esto como lo sugieren las otras respuestas en esta página.

Nota: En general, no se recomienda extender los prototipos integrados en JavaScript. Estoy proporcionando como extensiones en el prototipo de cadena simplemente con fines de ilustración, mostrando diferentes implementaciones de un método estándar hipotético en el String incorporado prototipo.


Implementación Basada en Expresiones Regulares

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

Dividir y Unir la Implementación (Funcional)

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

Al no saber demasiado sobre cómo funcionan las expresiones regulares entre bastidores en términos de eficiencia, solía inclinarme hacia la implementación de dividir y unir en el pasado sin pensar en el rendimiento. Cuando me pregunté cuál era más eficiente, y por qué margen, lo usé como excusa para averiguarlo.

En mi Chrome de Windows 8 máquina, la implementación basada en expresiones regulares es la más rápida, con la implementación de dividir y unir siendo un 53% más lenta. Lo que significa que las expresiones regulares son dos veces más rápidas para la entrada lorem ipsum que utilicé.

Mira esto parámetro ejecutar estas dos implementaciones una contra la otra.


Como se señala en el comentario a continuación de @ThomasLeduc y otros, podría haber un problema con la implementación basada en expresiones regulares si searchcontiene ciertos caracteres que están reservados como caracteres especiales en expresiones regulares. La implementación asume que la persona que llama escapará la cadena de antemano o solo pasará cadenas que no tengan los caracteres de la tabla en Expresiones Regulares (MDN).

MDN también proporciona una implementación para escapar de nuestras cadenas. Sería bueno si esto también fuera estandarizado como RegExp.escape(str), pero por desgracia, no existe:

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

Podríamos llamar escapeRegExp dentro de nuestra implementación String.prototype.replaceAll, sin embargo, no estoy seguro de cuánto afectará esto al rendimiento (potencialmente incluso para cadenas para las que no se necesita el escape, como todas las cadenas alfanuméricas).

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-27 21:55:56
str = str.replace(/abc/g, '');

En respuesta al comentario:

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

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

En respuesta al comentario de Haga clic en Upvote , podría simplificarlo aún más:

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

Nota: Las expresiones regulares contienen caracteres especiales (meta), y como tales es peligroso pasar ciegamente un argumento en la función find anterior sin procesarlo previamente para escapar de esos caracteres. Esto está cubierto en la [17]} Mozilla Developer Network ' s Guía JavaScript sobre Expresiones Regulares, donde presente la siguiente función de utilidad:

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

Así que para hacer la función replaceAll() anterior más segura, podría modificarse a lo siguiente si también incluye 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-21 22:17:14

Nota: No uses esto en código real.

Como alternativa a las expresiones regulares para una cadena literal simple, puede usar

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

El patrón general es

str.split(search).join(replacement)

Esto solía ser más rápido en algunos casos que usar replaceAll y una expresión regular, pero eso ya no parece ser el caso en los navegadores modernos. Por lo tanto, esto realmente solo debe ser utilizado como un truco rápido para evitar la necesidad de escapar de la expresión regular, no en código real.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-24 14:38:59

Usando una expresión regular con la bandera g reemplazará todo:

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

Ver aquí también

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-17 12:15:25

Aquí hay una función prototipo de cadena basada en la respuesta aceptada:

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

EDITAR

Si su find contendrá caracteres especiales, entonces necesita escaparlos:

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

Violín: 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-07 16:40:16

Actualizar:

Es un poco tarde para una actualización, pero ya que me tropecé con esta pregunta, y noté que mi respuesta anterior no es una con la que esté contento. Dado que la pregunta implicaba reemplazar una sola palabra, es increíble que nadie pensara en usar límites de palabras(\b)

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

Esta es una expresión regular simple que evita reemplazar partes de palabras en la mayoría de los casos. Sin embargo, un guión - todavía se considera un límite de palabra. Así condicionales se pueden utilizar en este caso para evitar reemplazar cadenas como 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"

Básicamente, esta pregunta es la misma que la pregunta aquí: Javascript reemplazar "'" con "" "

@ Mike, mira la respuesta que di allí... regexp no es la única manera de reemplazar múltiples ocurrencias de una subsrting, lejos de ello. ¡Piensa flexible, piensa dividido!

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

Alternativamente, para evitar la sustitución de partes de palabras-que la respuesta aprobada hará, también! Usted puede conseguir alrededor de este problema usando expresiones regulares que son, lo admito, algo más complejas y como resultado de eso, un poco más lentas también:

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

La salida es la misma que la respuesta aceptada, sin embargo, usando la expresión / cat / g en esta cadena:

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" ?? 

Oops de hecho, esto probablemente no es lo que quieres. ¿Qué es, entonces? IMHO, una expresión regular que solo reemplaza 'cat' condicionalmente. (es decir, no parte de una palabra), así:

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"

Mi conjetura es, esto satisface sus necesidades. No es a prueba de todo, por supuesto, pero debería será suficiente para empezar. Recomiendo leer más en estas páginas. Esto resultará útil para perfeccionar esta expresión para satisfacer sus necesidades específicas.

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

Http://www.regular-expressions.info


Adición final:

Dado que esta pregunta todavía recibe muchas vistas, pensé que podría agregar un ejemplo de .replace utilizado con una función de devolución de llamada. En este caso, se simplifica drásticamente la expresión y proporciona aún más flexibilidad, como reemplazar con mayúsculas correctas o reemplazar ambos cat y cats de una sola vez:

'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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:36

Coincidencia con una expresión regular global:

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-06 23:23:40
str = str.replace(/abc/g, '');

O pruebe la función replaceAll desde aquí:

¿Cuáles son los métodos JavaScript útiles que extienden los objetos incorporados?

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

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

EDIT: Aclaración sobre la disponibilidad de replaceAll

El método 'replaceAll' se añade al prototipo de String. Esto significa que estará disponible para todos los objetos de cadena/literales.

Por ejemplo

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:57

Digamos que quieres reemplazar todo el ' abc ' por '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

Estaba tratando de pensar en algo más simple que modificar el prototipo de cadena.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-27 22:01:59

Use una expresión regular:

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-27 21:56:32

Reemplazando comillas simples:

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-17 15:53:28

//loop hasta que el número de ocurrencias llega a 0. O simplemente copiar / pegar

    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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-05 14:01:12

Esta es la versión más rápida que no usa expresiones regulares.

Jsperf revisado

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

Es casi dos veces tan rápido como el método dividir y unir.

Como se señala en un comentario aquí, esto no funcionará si su variable omit contiene place, como en: replaceAll("string", "s", "ss"), porque siempre podrá reemplazar otra ocurrencia de la palabra.

Hay otro jsperf con variantes en mi reemplazo recursivo que van incluso más rápido ( http://jsperf.com/replace-all-vs-split-join/12)!

  • Actualización 27 de julio de 2017: Parece que RegExp ahora tiene el rendimiento más rápido en el recientemente lanzado 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-27 15:57:56
str = str.replace(new RegExp("abc", 'g'), "");

Funcionó mejor para mí que las respuestas anteriores. así que new RegExp("abc", 'g') crea una expresión regular que coincide con todas las ocurrencias ('g' bandera) del texto ("abc"). La segunda parte es lo que se reemplaza a, en su caso cadena vacía (""). str es la cadena, y tenemos que sobreescribirla, ya que replace(...) solo devuelve el resultado, pero no sobreescribe. En algunos casos es posible que desee utilizar eso.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-29 19:17:45

Si lo que quieres encontrar ya está en una cadena, y no tienes un escaper de expresiones regulares a mano, puedes usar 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
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/ajaxhispano.com/template/agent.layouts/content.php on line 61
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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-29 10:25:12

Usando RegExp en JavaScript podría hacer el trabajo por usted, simplemente haga algo como a continuación:

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

Si piensa en reutilizar, cree una función para hacer eso por usted, pero no se recomienda ya que es solo una función de línea, pero nuevamente si usa mucho esto, puede escribir algo como esto:

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

Y simplemente úsalo en tu código una y otra vez como a continuación:

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

Pero como mencioné anteriormente, no hará una gran diferencia en términos de líneas para ser escrito o rendimiento, solo el almacenamiento en caché de la función puede afectar un rendimiento más rápido en cadenas largas y también una buena práctica de código SECO si desea reutilizar.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-12 05:57:29

Me gusta este método (se ve un poco más limpio):

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-27 21:57:29

Si la cadena contiene un patrón similar como abccc, puede usar esto:

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-27 08:49:49

Si está tratando de asegurarse de que la cadena que está buscando no existirá incluso después del reemplazo, debe usar un bucle.

Por ejemplo:

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

Cuando esté completo, usted todavía tendrá 'prueba abc'!

El bucle más simple para resolver esto sería:

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

Pero eso ejecuta el reemplazo dos veces para cada ciclo. Tal vez (en riesgo de ser rechazado) que se puede combinar para una forma un poco más eficiente pero menos legible:

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

Esto puede ser particularmente útil cuando se buscan cadenas duplicadas.
Por ejemplo, si tenemos 'a,,, b' y queremos eliminar todas las comas duplicadas.
[En ese caso, uno podría hacerlo .replace ( / , + / g,','), pero en algún momento la expresión regular se vuelve lo suficientemente compleja y lenta como para hacer un bucle en su lugar.]

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-09 09:41:05

Podrías intentar combinar estos dos poderosos métodos.

"test abc test test abc".split("abc").join("")

Espero que ayude!

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-09 15:04:23

Simplemente puede usar el siguiente método

/**
 * 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-23 03:47:11

Aunque la gente ha mencionado el uso de expresiones regulares, hay un mejor enfoque si desea reemplazar el texto independientemente del caso del texto. Como mayúsculas o minúsculas. Use la sintaxis siguiente

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

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

Puede consultar el ejemplo detallado aquí.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-08 18:51:40

Simplemente siga esta expresión regular de oneliner agregando la sensibilidad de mayúsculas y minúsculas, por lo que si hace "ABC", actuaría de la misma manera que para "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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-17 12:58:22

Simplemente agregue /g

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

A

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

/g global

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-15 12:13:18

La siguiente función funciona para mí:

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

Ahora llama a las funciones de esta manera:

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

Simplemente copie y pegue este código en la consola de su navegador para PROBARLO.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-16 09:53:06

Utilizo p para almacenar el resultado del reemplazo de recursión anterior:

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

Reemplazará todas las ocurrencias en la cadena s hasta que sea posible:

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

Para evitar el bucle infinito, compruebo si el reemplazo r contiene una coincidencia 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-25 05:45:24