2008-11-13 16 views
6

¿Alguno de los frameworks de JavaScript existentes tiene una función no regex replace(), o ya se ha publicado en la web como una función única? Por ejemplo, quiero reemplazar "@!#$123=%" y no quiero preocuparme sobre qué personajes escapar. La mayoría de los idiomas parecen tener ambos métodos para hacer reemplazos. Me gustaría ver esta simple cosa agregada.JavaScript Non-regex Replace

Respuesta

18

i puede ser mal entendido su pregunta, pero JavaScript tiene un replace()

var string = '@!#$123=%'; 
var newstring = string.replace('@!#$123=%', 'hi'); 

edición: (ver comentarios) la 5ª edición parece tener esta información en ella, a pesar de que no aparece cuando yo link directly a él. aquí está la parte relevante:

El método replace() realiza una operación de búsqueda y reemplazo. Toma una expresión regular como primer argumento y una cadena de reemplazo como segundo argumento. Busca la cadena en la que se llama para coincidencias con el patrón especificado. Si la expresión regular tiene el indicador g establecido, el método replace() reemplaza todas las coincidencias en la cadena con la cadena de reemplazo; de lo contrario, reemplaza solo la primera coincidencia que encuentre. Si el primer argumento para reemplazar() es una cadena en lugar de una expresión regular, el método busca literalmente esa cadena en lugar de convertirla en una expresión regular con el constructor RegExp(), como lo hace search().

+0

eh. tal vez estaba viendo una versión anterior de "Javascript: The Definitive Guide" que solo mostraba el ejemplo de expresiones regulares. así que nunca probé el código anterior. ahora me siento realmente tonto. -10 puntos geniales para mí. – BuddyJoe

+0

sucede, acabo de encontrar un método lastIndexOf() ... * suspiro * ... – Owen

+0

¿Alguien puede consultar la versión más reciente de "Javascript: la guía definitiva"? ¿Este tipo de ejemplo ahora está incluido? – BuddyJoe

13

Tuve exactamente el mismo problema al buscar un método javascript string regex no regex(). Mi solución fue usar una combinación de split() y join():

"some text containing regex interpreted characters: $1.00".split("$").join("£"); 

lo que da:

"personajes un poco de texto que contiene expresiones regulares interpretadas: 1.00 €"

comparar con replace():

"some text containing regex interpreted characters: $1.00".replace(new RegExp("$"),"£") 

que da extrañamente:

"un texto que contiene expresiones regulares interpretado personajes: $ £ 1.00"

+0

No hay suficientes ejemplos en línea que le muestren el método de reemplazo simple - "texto que contiene caracteres interpretados con expresiones regulares: $ 1.00". replace ("$", "£"); – BuddyJoe

+0

Eso es programación web: reinventar la rueda. JavaScript 'replace()' es una broma mala. Gracias por este truco. Creo que es la mejor solución. +1 – user2173353

+6

«$» significa fin de línea en la expresión regular! Entonces, no hay nada extraño con 'RegExp (" $ ")' que coincida con el final de su línea como se esperaba. Debería haber escapado de su dólar antes de enviarlo a RegExp: 'RegExp (" \ $ ")' – Yvan

1

Prueba esto:

function replaceAllTemp(str,find, replace) { 
var ignoreCase=true; 
var _token; 
var token=find; 
var newToken=replace; 
var i = -1; 

if (typeof token === "string") { 

    if (ignoreCase) { 

     _token = token.toLowerCase(); 

     while((
      i = str.toLowerCase().indexOf(
       token, i >= 0 ? i + newToken.length : 0 
      )) !== -1 
     ) { 
      str = str.substring(0, i) + 
       newToken + 
       str.substring(i + token.length); 
     } 

    } else { 
     return this.split(token).join(newToken); 
    } 

} 
return str; 
};