2012-01-24 18 views
5

Provenendo da uno sfondo PHP, sono un po 'viziato con la funzione str_replace che è possibile passare una serie di haystack & aghi.Sostituzione di alcuni caratteri in javascript

Non ho ancora visto una tale funzione in Javascript, ma sono riuscito a ottenere il lavoro fatto, benche brutto, con il codice qui sotto indicato:

return myString.replace(" ", "-").replace("&", ",");

Tuttavia, come il mio bisogno di sostituire certi personaggi con un altro personaggio crescono, sono sicuro che ci sono molti modi migliori per ottenere questo risultato - sia dal punto di vista delle prestazioni sia da quello più bello.

Quindi cosa posso fare invece?

+0

Si potrebbe creare una funzione, ma non so una funzione javascript nativo che lo fa. –

+0

'myString.replace (" "," - ")' probabilmente non fa quello che vuoi. "" foo bar baz ".replace (" "," - ") ===" foo-bar baz "'. Sostituisci con una stringa poiché il modello sostituisce solo la prima occorrenza. –

risposta

5

È possibile utilizzare questo:

var str = "How are you doing?"; 
    var replace = new Array(" ", "[\?]", "\!", "\%", "\&"); 
    var by = new Array("-", "", "", "", "and"); 
    for (var i=0; i<replace.length; i++) { 
     str = str.replace(new RegExp(replace[i], "g"), by[i]); 
    } 

Mettere che in una funzione:

function str_replace(replace, by, str) { 
    for (var i=0; i<replace.length; i++) { 
     str = str.replace(new RegExp(replace[i], "g"), by[i]); 
    } 
    return str; 
} 

Uso esempio violino: http://jsfiddle.net/rtLKr/

+0

Avvolgi ogni singolo carattere con '\ [' & ']' - giusto? – Industrial

+0

Beh, si basa su espressioni regolari, quindi sì, la maggior parte di loro ha bisogno di wrapping ed escaping. Di solito sono troppo pigro per pensarci e basta lanciarlo in tentativi ed errori su jsFiddle.net o qualcosa del genere. –

2

Se è più facile per te, puoi immagino qualcosa del genere;

str.replace(/[ab]/g, function (match, i) { 
    switch (match) { 
     case "a": 
      return "A"; 
     case "b": 
      return "B";  
    } 
})); 

vale a dire fare un'espressione regolare nel parametro 1 che accetta tutti i gettoni che stai cercando, e poi nella funzione Aggiungi casi da fare la sostituzione.

3

bellezza di JavaScript è che si può estendere la funzionalità di tipi di base in modo da poter aggiungere un metodo -String stessa:

// v --> array of finds 
// s --> array of replaces 
String.prototype.replaceAll = function(v, s){ 
    var i , ret = this; 
    for(i=0;i<v.length;i++) 
     ret = ret.replace(v[i], s[i]); 
    return ret; 
} 

e ora lo usano:

alert("a b c d e f".replaceAll(["a", "b"], ["1", "2"])); //replaces a b with 1 2 

La demo è here.

2

Ecco un mix di alcune delle altre risposte. Ho appena piace, a causa della dichiarazione di valore-chiave delle sostituzioni

function sanitize(str, replacements) { 
    var find; 
    for(find in replacements) { 
     if(!replacements.hasOwnProperty(find)) continue; 
     str = str.replace(new RegExp(find, 'g'), replacements[find]); 
    } 
    return str; 
} 

var test = "Odds & ends"; 
var replacements = { 
    " ": "-", // replace space with dash 
    "&": "," // replace ampersand with comma 
    // add more pairs here 
}; 

cleanStr = sanitize(str, replacements); 
+0

Mi piace, bel lavoro :) –

Problemi correlati