2010-01-14 2 views
6

Puede usar una matriz para el reemplazo:Javascript a reemplazar a nivel mundial con arreglo

var array = {"from1":"to1", "from2":"to2"} 

for (var val in array) 
    text = text.replace(array, array[val]); 

Pero lo que si es necesario sustituir todo el mundo, es decir, texto = text.replace (/ desde/g, "a");

La matriz es bastante grande, por lo que el script ocupará mucho espacio si escribo "text = text.replace (...)" para cada variable.

¿Cómo se puede usar la matriz en ese caso? "/ from1/g": "to1" no funciona.

+2

Su matriz es en realidad un objeto Objeto, no un objeto Array, incluso si puede considerarse como una matriz asociativa :) – Luc125

Respuesta

7
var array = {"from1":"to1", "from2":"to2"} 

for (var val in array) 
    text = text.replace(new RegExp(val, "g"), array[val]); 

Edit: Como dijo Andy, puede que tenga que escapar los caracteres especiales usando un script como this one.

+0

Si la cadena podría contener caracteres especiales de expresión regular, no olvide escaparse correctamente. –

2

Aquí es el idioma de cadena sencilla, no basado en RegExp sustituir en JS, por lo que no tiene que preocuparse acerca de expresiones regulares-especial de caracteres:

for (var val in array) 
    text= text.split(val).join(array[val]); 

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 s de lo que deseaba; puede usar una prueba hasOwnProperty para evitar eso. Además, en IE si su 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 datos diferentes estructura tal como una matriz de matrices [find, replace].

4

Aquí está mi solución, suponiendo que las claves de cadena en array no necesitan ser escapadas.

Es particularmente eficaz cuando el objeto es grande array:

var re = new RegExp(Object.keys(array).join("|"), "g"); 
var replacer = function (val) { return array[val]; }; 
text = text.replace(re, replacer); 

Nota esto requiere el método Object.keys a estar disponible, pero se puede fácilmente calce si no lo es.

Cuestiones relacionadas