Lo más cercano que he encontrado para hablar sobre lo que quiero hacer es este hilo .
JavaScript tiene un método de reemplazo muy bueno: string.replace(searchValue, newValue)
Si tengo una cadena como esta: var str = '/by-the-pound/c/252' y quiero reemplazar el '/' con cadenas vacías (básicamente eliminándolas), puedo hacer algo como esto: str.replace(/[/]/g, "");
y si quiero reemplazar 'c' con '-', puedo hacer esto: str.replace(/c/g, "-");
Entiendo que podemos encadenar esto así: str.replace(/[/]/g, "").replace(/c/g, "-"); y nos dará esto: 'by-the-pound-252'
Pero, ¿y si tuviera una cadena muy larga y quisiera reemplazar, digamos, 10 caracteres diferentes, con 10 valores diferentes? Esa sería una línea de código muy larga y encadenada con 10 métodos .replace .
TL;RD
¿Hay alguna manera de usar un .replace pero tener múltiples searchValue's y newValue's ?
He intentado algo como esto (y muchos más), pero nada ha funcionado:
str.replace(/[/]|[c]/g, ""|"-") str.replace(/[/]|[c]/g, "","-"); str.replace(/[/],[c]/g, "","-"); str.replace(/[/|c]/g, [""|"-"]); str.replace(/[/|c]/g, "","-");¿Por qué quiero hacer esto? Por brevedad, por código limpio/fácil de leer, etc...
Gracias por tu tiempo.
ACTUALIZACIÓN: La respuesta a mi pregunta es probablemente No. Probablemente no haya una manera de hacer lo que pregunté, que fue: ¿Hay alguna manera de usar un .replace pero tener múltiples searchValue y newValue? Revisé todos los documentos que pude encontrar, pero no vi ningún ejemplo funcional de eso. Me doy cuenta de que hay diferentes maneras de lograr lo que quiero hacer. Pude crear una función, por ejemplo, usando una matriz de pares como sugirió @DaveNewton (similar a lo que han hecho @MauroAguilar y @Ryan), y funcionó bien, pero solo quería saber si podría hacer esto. en una sola línea. Probablemente una publicación desperdiciada. Mods siéntase libre de eliminar. Gracias a todos por tomarse el tiempo.
No veo ningún problema con el encadenamiento, pero si lo que desea es algún tipo de utilidad que automatice este proceso, entonces podría escribir una función de utilidad simple como esta:
const replacer = (str, values) => values.reduce((fstr, [val, rep]) => fstr.replace(val, rep), str); const replacer = (str, values) => values.reduce((fstr, [val, rep]) => fstr.replace(val, rep), str); const str = 'Peter Piper Picked a Peck of pickled peppers'; const result = replacer(str, [ [/p/ig, 'B'], [/\s/g, '-'], [/-/g, '/'] ]); console.log(result);Haría una lista de reemplazos que se pueden agregar y repetir.
export interface StringReplacement { find: string; replace: string; }Crear una lista de StringReplacement
const stringReplacements: StringReplacement[] = [ { find: 'val1', replace: 'val2' }, { find: 'val5', replace: 'val6' } ]Luego, cuando estés listo para transformar
const inputString = 'this val1 is the val5 input string.'; stringReplacements.forEach(replacement => inputString = inputString.replace(replacement.find, replacement.replace) );