2009-10-22 35 views
27

Me encuentro con un problema que creo que es causado por la necesidad de duplicar algunas comillas simples dentro de una cadena. Sin embargo, el string.replace de JS usa RegEx y nunca he creado un RegEx a mano.Regex para reemplazar una comilla simple con dos comillas simples

¿Alguien me puede ayudar a construir un RegEx para encontrar un solo presupuesto y reemplazarlo por dos comillas simples?

Respuesta

52

Prueba esto: String.Replace

yourstring = yourstring.replace(/'/g, "''") 
+0

NO: en este caso, funciona http://stackoverflow.com/q/30361748/285594 – YumYumYum

+0

@YumYumYum, en ese caso no es necesario "reemplazar una comilla simple con dos comillas simples", sino codificar esa comilla adicional apóstrofes. –

+0

¿Cómo haces eso que acabas de mencionar, por favor? He intentado a mi manera pero he fallado, necesito tener comillas simples y comillas dobles para mostrar y enviar. – YumYumYum

4

str.replace(/'/g, "''");

Asegúrese de utilizar la bandera partido mundial (g) para que sustituya a cualquier y todas las ocurrencias de la cadena. Más información here.

+0

Eso hace una doble cita de una comilla simple, pero no reemplaza una comilla simple por dos comillas simples, como el PO pide. – Jesper

+0

Gracias por el aviso. –

4

de JS utiliza expresiones regulares

No necesariamente:

var str = "O'Reilly's books"; 
alert(str.replace("'", "''", 'g')); 

MDC's String replace referencia:

El patrón puede ser una cadena o una expresión regular

Mmm, lo anterior no parece funcionar en IE6 mi código, por lo que será:

str.replace(/'/g, "''") 

al igual que los otros dijeron, pero el uso de expresiones regulares para una operación tan simple es excesivo.

1

no sé la sintaxis exacta, pero se puede encontrar que usted mismo:

str.replace(/(?!')'(?!')/g, "''"); 

no hemos probado esto todavía, pero si funciona, sino que también se encarga de única sustitución de ocurrencias de una comilla simple en una fila. El modificador g es necesario para reemplazar todas las ocurrencias.

+0

esto no funciona. Pero, realmente también lo quiero porque me gusta la idea detrás de la idempotencia de esta traducción –

+0

Aquí está la respuesta: http://stackoverflow.com/questions/6070275/regular-expression-match-only-non-repeated-occurrence- of-a-character –

0
js> s = "abc'def'xyz" 
abc'def'xyz 
js> s.replace(/'/g, "''") 
abc''def''xyz 
2

Tenga en cuenta que si usted no desea utilizar RegExp (y con frecuencia hay buenas razones para no), el idioma para una simple sustitución de cadenas es:

str.split("'").join("''") 

Aunque la versión es RegExp típicamente marginalmente más rápido, la versión de cadena puede ser una ganancia cuando no se sabe si puede haber caracteres especiales de expresión regular (como .) en la cadena de búsqueda.

+0

Estaba usando IE7 y me preguntaba por qué no funcionaban todas las respuestas anteriores. Una vez que implementé este str.split(). Join(), todos mis apóstrofes se reemplazaron correctamente. Por alguna razón, la "g" estaba siendo ignorada. Gracias bobince a compartir los fundamentos! – fenix

3

Prueba esto:

function QuoteEncoding(strvalue) { 
    var strquotes = /(')/g; 
    return "'" + strvalue.replace(strquotes, "''") + "'"; 
} 

llamada de este método de la siguiente manera:

QuoteEncoding(strvalue); 
Cuestiones relacionadas