Reemplace varios caracteres en una sola llamada de reemplazo

Resuelto Shannon Hochkins asked hace 11 años • 21 respuestas

Necesito reemplazar cada instancia de '_' con un espacio y cada instancia de '#' con nada/vacío.

var string = '#Please send_an_information_pack_to_the_following_address:';

He probado esto:

string.replace('#','').replace('_', ' ');

Realmente no me gusta encadenar comandos como este. ¿Hay otra manera de hacerlo en uno?

Shannon Hochkins avatar May 16 '13 07:05 Shannon Hochkins
Aceptado

Utilice el operador O ( |):

var str = '#this #is__ __#a test###__';

console.log(
  str.replace(/#|_/g, '') // "this is a test"
)
Expandir fragmento

También puedes usar una clase de personaje:

str.replace(/[#_]/g,'');

Violín

Si desea reemplazar el hash con una cosa y el guión bajo con otra, entonces sólo tendrá que encadenar

function allReplace(str, obj) {
  for (const x in obj) {
    str = str.replace(new RegExp(x, 'g'), obj[x]);
  }
  return str;
};


console.log(
  allReplace( 'abcd-abcd', { 'a': 'h', 'b': 'o' } ) // 'hocd-hocd'
);
Expandir fragmento

¿Por qué no encadenar? No veo nada malo con eso.

tckmn avatar May 16 '2013 00:05 tckmn

Si desea reemplazar varios caracteres, puede llamar a String.prototype.replace()con el argumento de reemplazo como una función que se llama para cada coincidencia. Todo lo que necesitas es un objeto que represente el mapeo de caracteres que usarás en esa función.

Por ejemplo, si desea areemplazar con x, bcon yy ccon z, puede hacer algo como esto:

const chars = {
  'a': 'x',
  'b': 'y',
  'c': 'z'
};

let s = '234abc567bbbbac';
s = s.replace(/[abc]/g, m => chars[m]);
console.log(s);
Expandir fragmento

Producción :234xyz567yyyyxz

Voicu avatar Jun 10 '2017 16:06 Voicu