Reemplace varios caracteres en una sola llamada de reemplazo
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?
Utilice el operador O ( |
):
var str = '#this #is__ __#a test###__';
console.log(
str.replace(/#|_/g, '') // "this is a test"
)
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'
);
¿Por qué no encadenar? No veo nada malo con eso.
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 a
reemplazar con x
, b
con y
y c
con 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);
Producción :234xyz567yyyyxz