2009-10-22 15 views
27

Si è verificato un problema che a mio avviso è causato dalla necessità di raddoppiare alcune virgolette singole all'interno di una stringa. Tuttavia, string.replace di JS utilizza RegEx e non ho mai creato una RegEx a mano.Regex per la sostituzione di una virgoletta con due virgolette singole

Qualcuno può aiutarmi a compilare una RegEx per trovare una virgoletta singola e sostituirla con due virgolette singole?

risposta

52

Prova questo: String.Replace

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

NOT - funziona in questo caso http://stackoverflow.com/q/30361748/285594 – YumYumYum

+0

@YumYumYum, in tal caso non è necessario "sostituire una virgoletta con due virgolette singole", ma per codificarlo apostrofi. –

+0

Come si fa a fare ciò che hai appena menzionato, per favore? Ho provato a modo mio, ma non è riuscito, ho bisogno di avere virgolette singole e doppie come è per la visualizzazione e invio. – YumYumYum

4

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

Assicurarsi di utilizzare il flag partita globale (g) in modo che si sostituisce qualsiasi e tutte le occorrenze della stringa. Ulteriori informazioni here.

+0

che fa un doppio apice da un apostrofo, ma non sostituisce una singola citazione di due apici, come l'OP chiede. – Jesper

+0

Grazie per l'avviso. –

4

di JS utilizza RegEx

Non necessariamente:

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

MDC's String replace di riferimento:

Il modello può essere una stringa o un RegExp

Mmm, il mio codice di cui sopra non sembra di lavorare su IE6, in modo che sarà:

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

come gli altri hanno detto, ma usare espressioni regolari per un'operazione così semplice è eccessivo.

1

non so la sintassi esatta, ma si possono trovare che voi stessi:

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

non hanno ancora testato, ma se funziona, ma si occupa anche del solo sostituendo le occorrenze di uno virgoletta singola di fila. Il modificatore g è necessario per sostituire tutte le occorrenze.

+0

questo non funziona. Ma lo voglio davvero anche perché mi piace l'idea alla base dell'identricità di questa traduzione –

+0

Ecco la risposta: http://stackoverflow.com/questions/6070275/regular-expression-match-only-non-repeated-occurrence- di-a-character –

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

Si noti che se non si desidera utilizzare RegExp (e spesso ci sono buone ragioni per non), l'idioma per una semplice sostituzione stringa è:

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

Anche se la versione è RegExp tipicamente marginalmente più veloce, la versione della stringa può essere una vittoria quando non si sa se ci potrebbero essere caratteri speciali regex (come .) nella stringa di ricerca.

+0

Stavo usando IE7 e mi stavo chiedendo perché tutte le risposte sopra non funzionassero. Una volta implementato questo str.split(). Join() tutti i miei apostrofi sono stati sostituiti correttamente. Per qualsiasi motivo la "g" veniva ignorata. Grazie bobince alla condivisione dei fondamentali! – fenix

3

Prova questo:

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

chiamata di questo metodo come segue:

QuoteEncoding(strvalue); 
Problemi correlati