Búsqueda de sitios web

JavaScript - Reemplazar todas las comas en una cadena


Tengo una cadena con múltiples comas, y el método replace de la cadena solo cambiará la primera:

var mystring = "this,is,a,test"
mystring.replace(",","newchar", -1)

Resultado: "thisnewcharis,a,test"

La documentación indica que el valor predeterminado reemplaza todo, y que "-1" también indica reemplazar todo, pero no tiene éxito. ¿Alguna idea?

Respuesta #1

El tercer parámetro de la función String.prototype.replace() nunca fue definido como un estándar, por lo que la mayoría de los navegadores simplemente no lo implementan. Eventualmente fue eliminado y reemplazado por String.prototype.replaceAll() (ver más abajo).


Solución moderna (2022)

Usa String.prototype.replaceAll(). Ahora es compatible con todos los navegadores y NodeJS.

var myStr = "this,is,a,test";
var newStr = myStr.replaceAll(",", "-");

console.log( newStr );  // "this-is-a-test"

La forma antigua es usar una expresión regular con el flag g (global)

var myStr = "this,is,a,test";
var newStr = myStr.replace(/,/g, "-");

console.log( newStr );  // "this-is-a-test"
¿Tienes problemas con las expresiones regulares?

Es importante tener en cuenta que las expresiones regulares utilizan caracteres especiales que necesitan ser escapados. Por ejemplo, si necesitas escapar un punto (.), debes usar el literal /\./, ya que en la sintaxis de las expresiones regulares un punto coincide con cualquier carácter individual (excepto los terminadores de línea).

Si necesitas pasar una variable como cadena de reemplazo, en lugar de usar una expresión regular literal, puedes crear un objeto RegExp y pasar una cadena como su primer argumento. Serán necesarias las reglas habituales de escape (preceder los caracteres especiales con \ cuando se incluyan en una cadena).

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

var myStr = "this.is.a.test";
var reStr = escapeRegex(".");
var newStr = myStr.replace(new RegExp(reStr, "g"), "-");

console.log( newStr );  // "this-is-a-test"

Respuesta #2

Solo por diversión:

var mystring = "this,is,a,test"  
var newchar = '|'
mystring = mystring.split(',').join(newchar);

Respuesta #3

var mystring = "this,is,a,test"
mystring.replace(/,/g, "newchar");

Usa la bandera global(g)

Demostración simple

Artículos relacionados