2009-09-16 13 views
12

Quiero reemplazar las citas inteligentes como , , y a las comillas regulares. Además, quería reemplazar el ©, ® y . Use el siguiente código. Pero no ayuda. Amablemente ayúdame a resolver este problema.Reemplazar método no funciona

str.replace(/[“”]/g, '"'); 
str.replace(/[‘’]/g, "'"); 
+0

Esto podría ser un problema de codificación de caracteres. ¿Qué codificación usa en su código y qué codificación tiene su información? – Gumbo

Respuesta

28

Uso:

str = str.replace(/[“”]/g, '"'); 
str = str.replace(/[‘’]/g, "'"); 

o hacerlo en una declaración:

str = str.replace(/[“”]/g, '"').replace(/[‘’]/g,"'"); 

En JavaScript (como en muchos otros idiomas) las cadenas son inmutables - cadena de métodos de "sustitución" de hecho solo devuelve la nueva cadena en lugar de modificar la cadena en su lugar.

Los MDN JavaScript reference entry para replace estados:

devuelve una nueva cadena con algunos o todos los partidos de un patrón reemplazado por un sustituto.

...

Este método no cambia el objeto de cadena que se llama sucesivamente. Simplemente devuelve una nueva cadena.

+2

también ver: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/String/replace –

+0

Gracias Jonathan - agregará el enlace a la respuesta. –

+0

Jon, todavía tengo el mismo problema. –

3

replace devuelve la cadena resultante

str = str.replace(/["']/, ''); 
1

El PO no dice por qué no está funcionando, pero parece que hay problemas relacionados con la codificación del archivo. Si tengo un archivo ANSI codificado y lo hago:

var s = "“This is a test” ‘Another test’"; 
s = s.replace(/[“”]/g, '"').replace(/[‘’]/g,"'"); 
document.writeln(s); 

me sale:

"This is a test" "Another test" 

Convertí la codificación UTF-8, fija las comillas tipográficas (que se rompió cuando cambié de codificación), luego se convirtió nuevamente a ANSI y el problema desapareció.

Tenga en cuenta que al copiar y pegar las comillas dobles e individuales inteligentes fuera de esta página en mi documento de prueba (ANSI codificada) y encontré este código:

var s = "“This is a test” ‘Another test’"; 
for (var i = 0; i < s.length; i++) { 
    document.writeln(s.charAt(i) + '=' + s.charCodeAt(i)); 
} 

descubrí que todas las comillas tipográficas se presentaron como ? = 63.

Por lo tanto, para el OP, determine dónde se originan las comillas inteligentes y asegúrese de que sean los códigos de caracteres que espera que sean. Si no lo son, considere cambiar la codificación de la fuente para que lleguen como “ = 8220, ” = 8221, ‘ = 8216 y ’ = 8217. Use mi ciclo para examinar la fuente, si las comillas inteligentes se muestran con cualquier valor charCodeAt() que no sean los que he enumerado, replace() no funcionará como está escrito.

1

Para reemplazar todas las comillas regulares con comillas tipográficas, estoy usando una función similar. Debe especificar CharCode ya que algunas configuraciones predeterminadas de computadoras/navegadores diferentes pueden identificar los caracteres simples de forma diferente ("", ", ',').

Usando el CharCode con llame al caracter ASCII, que eliminará la sala por error en diferentes navegadores y sistemas operativos. Esto también es útil para uso bilingüe (acentos, etc.).

Para reemplazar comillas tipográficas con comillas simples

function unSmartQuotify(n){ 
    var name = n; 
    var apos = String.fromCharCode(39); 
    while (n.indexOf("'") > -1) 
     name = name.replace("'" , apos); 
    return name; 
} 

Para encontrar los otros valores ASCII que pueda necesitar. Compruebe here.

Cuestiones relacionadas