2010-01-14 20 views
6

È possibile utilizzare array per la sostituzione:javascript sostituire a livello globale con serie

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

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

Ma cosa succede se è necessario sostituire a livello globale, vale a dire text = text.replace (/ da/g, "a");

L'array è piuttosto grande, quindi lo script richiederà molto spazio se scrivo "text = text.replace (...)" per ogni variabile.

Come si può utilizzare la matrice in questo caso? "/ from1/g": "to1" non funziona.

+2

L'array è in realtà un oggetto Object, non un oggetto Array, anche se può essere considerato come un array associativo :) – Luc125

risposta

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

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

Edit: Come ha detto Andy, potrebbe essere necessario sfuggire ai caratteri speciali utilizzando uno script come this one.

+0

Se la stringa può contenere caratteri speciali regexp, non dimenticare di eseguire correttamente l'escape. –

2

Ecco il linguaggio per la semplice stringa, non basato su RegExp sostituire in JS, quindi non c'è bisogno di preoccuparsi di personaggi espressioni regolari-speciale:

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

Nota ci sono problemi con l'utilizzo di un oggetto come una ricerca generale. Se qualcuno è scimmiato con il prototipo Object (cattiva idea, ma alcune librerie lo fanno) puoi ottenere più val s di quello che volevi; puoi usare un test hasOwnProperty per evitarlo. Inoltre in IE se la tua stringa si verifica in conflitto con un metodo di Object come toString, IE lo nasconderà misteriosamente.

Per il tuo esempio qui sei a posto, ma come un caso generale in cui le stringhe possono essere qualsiasi cosa, dovresti aggirare il problema, elaborando le stringhe di chiavi per evitare gli scontri o utilizzando dati diversi struttura come una matrice di matrici [find, replace].

4

Ecco la mia soluzione, supponendo che le chiavi stringa in array non debbano essere sfuggite.

è particolarmente efficiente quando l'oggetto array è di grandi dimensioni:

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

Nota questo richiede il metodo Object.keys essere disponibile, ma si può facilmente spessore, se non lo è.

Problemi correlati