son - javascript reemplazar globalmente con matriz
tipos de funciones en javascript (3)
Puede usar array para reemplazo:
var array = {"from1":"to1", "from2":"to2"}
for (var val in array)
text = text.replace(array, array[val]);
Pero, ¿qué sucede si necesita reemplazar globalmente, es decir, text = text.replace (/ from / g, "to");
Array es bastante grande, por lo que el script tomará mucho espacio si escribo "text = text.replace (...)" para cada variable.
¿Cómo se puede usar una matriz en ese caso? "/ from1 / g": "to1" no funciona.
Aquí está el modismo para el reemplazo de cadenas simple, no basado en RegExp en JS, por lo que no tiene que preocuparse por los caracteres especiales de expresiones regulares:
for (var val in array)
text= text.split(val).join(array[val]);
Tenga en cuenta que hay problemas con el uso de un objeto como una búsqueda de propósito general. Si alguien es engañado con el prototipo Object (mala idea, pero algunas bibliotecas lo hacen) puede obtener más val
de lo que deseaba; puede usar una prueba hasOwnProperty
para evitar eso. Además, en IE si tu cadena choca con un método de Object
como toString
, IE lo ocultará misteriosamente.
Para su ejemplo aquí, está bien, pero como un caso general en el que las cadenas pueden ser cualquier cosa, tendría que evitarlo, ya sea procesando las cadenas clave para evitar conflictos o utilizando una estructura de datos diferente, como Matriz de [find, replace]
Arrays.
var array = {"from1":"to1", "from2":"to2"}
for (var val in array)
text = text.replace(new RegExp(val, "g"), array[val]);
Editar: Como Andy dijo, es posible que tengas que escapar de los personajes especiales usando un script como este .
Aquí está mi solución, suponiendo que las claves de cadena en array
no necesitan ser escapadas.
Es particularmente eficiente cuando la array
objetos es grande:
var re = new RegExp(Object.keys(array).join("|"), "g");
var replacer = function (val) { return array[val]; };
text = text.replace(re, replacer);
Tenga en cuenta que esto requiere que el método Object.keys
esté disponible, pero puede calzarlo fácilmente si no lo está.