2012-01-24 18 views
5

Viniendo de un fondo de PHP, estoy un poco mimado con la función str_replace que puede pasar una matriz de pajares & agujas.Reemplazar ciertos caracteres en javascript

todavía no he visto tal función en Javascript, pero he conseguido hacer el trabajo, Altough feo, con el código de abajo se muestra:

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

Sin embargo, como mi necesidad de reemplazar Ciertos personajes con otro personaje crecen, estoy seguro de que hay formas mucho mejores de lograr esto, tanto en cuanto a desempeño como a lo más bonito.

Entonces, ¿qué puedo hacer?

+0

Puede crear una función, pero no conozco una función nativa de javascript que lo haga. –

+0

'myString.replace (" "," - ")' probablemente no haga lo que quiera. '" foo bar baz ".replace (" "," - ") ===" foo-bar baz "'. Reemplace con una cuerda ya que el patrón solo reemplaza la primera vez. –

Respuesta

5

Se puede utilizar esta:

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]); 
    } 

Poner esto en una función:

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 Ejemplo de violín: http://jsfiddle.net/rtLKr/

+0

Envuelve cada char con '\ [' & ']' - ¿verdad? – Industrial

+0

Bueno, está basado en expresiones regulares, así que sí, la mayoría de ellos sí necesitan envolverse y escapar. Por lo general, soy demasiado flojo como para pensar en ello y ponerlo en prueba y error en jsFiddle.net o algo así. –

2

Si es más fácil para usted, usted migh t imagina algo como esto;

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

es decir, hacer una expresión regular en el parámetro 1, que acepta todas las fichas que está buscando, y luego en la función de añadir los casos que hacer la sustitución.

3

belleza de JavaScript es que se puede ampliar la funcionalidad de los tipos base lo que puede añadir un método -String sí:

// 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; 
} 

y ahora lo utilizan:

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

Demo es here.

2

Aquí hay una mezcla de algunas de las otras respuestas. Simplemente me gusta, debido a la declaración de valor clave de reemplazos

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

Me gusta, buen trabajo :) –

Cuestiones relacionadas