Replace all en Javascript

Hace unos días trate de ayudar con algo muy simple en Javascript y me encontre con la sorpresa que la funcion nativa de replace de javascript solo remplaza la primera coincidencia y no sigue buscando en el string(y por ende tampoco remplazando. Por lo que aqui hicimos una pequeña funcion de forma recursiva para reemplazar todas las ocurrencias en un String. El ejemplo en particular era que teniamos que sacar todos los puntos de un numero.
>>>replaceAll("123.345.567", ".", "" );
>>"123345567"
-- Atte. Victor Hugo Saavedra http://vhspiceros.blogspot.com

Comentarios

  1. foo.replace(/\./g, '')

    "g" stands for global

    ResponderEliminar
  2. Is very good. This solution is very fast to implement.

    Thanks.
    --
    Atte.
    Victor Hugo saavedra
    http://vhspiceros.blogspot.com

    ResponderEliminar
  3. Muchas gracias!!!! La verdad es que me vino genial. Saludos!!

    :)

    ResponderEliminar
  4. La funcion podria entrar en un bucle infinito
    replaceAll( text, busca, reemplaza )
    tiene la restriccion que el texto del parametro busca no puede estar dentro lo que se quiere reemplazar

    No funciona para un caso similar a
    replaceAll( "Hola mundo!", "!", "!!" )

    ResponderEliminar
    Respuestas
    1. Buclazo infinito!!! XD
      Mucho mejor con una RegExp:
      foo.replace(/\./g, '')

      Eliminar
  5. efectivamente tiene esa limitancia.


    es mucho mejor hacer foo.split('.').join('') como puse en un comentario mas arriba,

    ResponderEliminar
  6. string.replace(/\./g, '');

    ResponderEliminar
  7. Muchas gracias!!! Me ha venido fenomenal

    ResponderEliminar
  8. La funcion replace si puede sustituir todos los caracteres, no solo el primero, escribiendo el siguiente codigo:

    cadena = cadena.replace(/buscar/g, "reemplazar")

    Y esta comprobado.

    Un saludo

    ResponderEliminar
  9. facil y efectivo gracias..
    Lo utilize para revertir desde formtao español de numeros, es decir, con . milesimas y , decimales, a formato ingles solo con . los decimales
    Ej:
    75.000,89 => 75000.89

    ResponderEliminar
  10. Muchas gracias Victor por tu aporte, lo utilicé con sugarcrm.
    Sugar guarda el valor de un select multiple de esta forma ^valor^,^valor1^ y asi sucesivamente, primero hice un split sobre las comas y después apliqué tu funcion para quitarle los ^.
    Gracias.

    ResponderEliminar
  11. Excelente Francisco. que bueno que te halla sido de utilidad esta entrada :D

    ResponderEliminar
  12. Y como se puede reemplazar usando variables?

    var str="reemplaza las cadenas a buscar";
    var buscar="las";
    var reemplaza="por";
    alert(str.replace(/buscar/gi,reemplaza));

    ResponderEliminar
  13. Muchas gracias, me fue de gran ayuda, tenia que reemplazar en una cadena el simbolo $ por el S/. que es la moneda de perú, pero me encontre que la / javascript me la toma como un limitador

    ResponderEliminar
  14. Respondiendo a "anonimo" que dijo:

    La funcion podria entrar en un bucle infinito
    replaceAll( text, busca, reemplaza )
    tiene la restriccion que el texto del parametro busca no puede estar dentro lo que se quiere reemplazar

    No funciona para un caso similar a
    replaceAll( "Hola mundo!", "!", "!!" )

    --------

    Agregale un "startIndex" al .indexOf para que no busque en los que ya reemplazó:

    [js]
    function replaceAll( text, busca, reemplaza ){
    var idx = text.toString().indexOf(busca);
    while (idx != -1) {
    text = text.toString().replace(busca,reemplaza);
    idx = text.toString().indexOf(busca, idx);
    }
    return text;
    }
    [/js]

    ResponderEliminar
  15. Gracias tios me sirvio, sois la puta ostia!

    ResponderEliminar
  16. si el caracter esta al inicio de la frace y este se repite varias veces no me funciona .replace(/buscar/g,reemplaza) tampoco .split(buscar).join(reemplaza, quisiera hacerlo todo en una linea

    ResponderEliminar
  17. Windows Live ID requires JavaScript to sign in. This web browser either does not support JavaScript, or scripts are being blocked.

    To find out whether your browser supports JavaScript, or to allow scripts, see the browser's online help.

    Tratando de entrar a la cuenta de hotmail, alguien puede indicarme que debo hacer?
    Muchas gracias!

    ResponderEliminar
    Respuestas
    1. Tu navegador no soporta Javascript o lo tienes deshabilitado, revisa la configuración del navegador o usa uno que sí soporte Javascript, por ejemplo Google Chrome.

      Saludos!

      Eliminar
  18. Thank you very much! So simple and so powerful!

    ResponderEliminar
  19. Perfecto, ahora podré agregar el caractér ­ a todas las palabras que tengan demasiadas letras. El replace de JS sólo estaba reemplazando la primera ocurrencia.

    ResponderEliminar
  20. en realidad no es una limitacion, es que no estas escribiendo el regex como se debe :D
    fijate

    var str1 = "1,2,3,4,5,6"
    str1.replace(",","") //solo te va a remplazar una coma, ya que al usar comillas se hace entender que buscas un caracter especifico

    str1.replace(/,/g,"") al utilizar la combinacion de // con g le indicas que quieres capturar cada caracter..

    ResponderEliminar
  21. Jodida Hostia me ha resultado

    ResponderEliminar
  22. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  23. Simple y funciona genial.
    ¡Gracias!

    ResponderEliminar
  24. Muchas Gracias me saco de un gran inconveniente que tenia. AP

    ResponderEliminar
  25. Muchas gracias por el código!

    ResponderEliminar
  26. hermano un monton de gracias, tenia problemas al hacer el set de mi token en local storage de angularjs por alguna se colaban un par de comillas de mas al inicio y al final de mi estring token y tu funcion me soluciono el dia, saludos desde venezuela de @lordcasslos

    ResponderEliminar
  27. Busque mucho y fuiste la única solición.

    Saludos y gracias!!

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Buscar columnas en todas las tablas SQL SERVER

"is not null" o "<> Null" en Sql Server

Aplicación y Aplicativo