2009-10-22 13 views
27

Ich stoße auf ein Problem, das meiner Meinung nach dadurch verursacht wird, dass einige einfache Anführungszeichen innerhalb einer Zeichenfolge verdoppelt werden müssen. JS string.replace verwendet jedoch RegEx, und ich habe nie eine RegEx von Hand gebaut.Regex zum Ersetzen eines einfachen Anführungsstrichs durch zwei einfache Anführungszeichen

Kann mir jemand helfen, eine RegEx zu erstellen, um ein einzelnes Angebot zu finden und es durch zwei einfache Anführungszeichen zu ersetzen?

Antwort

52

Versuchen Sie folgendes:

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

NICHT - in diesem Fall funktioniert http://StackOverflow.com/q/30361748/285594 – YumYumYum

+0

@YumYumYum, in diesem Fall brauchen Sie nicht "ein einzelnes Zitat mit zwei einfachen Anführungszeichen zu ersetzen", sondern das zusätzliche zu kodieren Apostrophe. –

+0

Wie machst du das, was du gerade erwähnt hast? Ich habe meinen Weg versucht, aber gescheitert, ich brauche ein einfaches Anführungszeichen und doppelte Anführungszeichen, wie es für die Anzeige und das Senden ist. – YumYumYum

4

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

Seien Sie sicher, dass das globale Spiel-Flag (g) verwenden, so dass Sie alle und alle Vorkommen in der Zeichenfolge ersetzen. Weitere Informationen here.

+0

, die ein doppeltes Zitat aus einem einzigen Zitat macht, aber nicht ein einziges Zitat durch zwei einfache Anführungszeichen nicht ersetzen, da die OP fragen. – Jesper

+0

Danke für die Köpfe hoch. –

4

JS des string.replace verwendet RegEx

Nicht unbedingt:

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

MDC's String replace Referenz:

Das Muster kann

Mmm, mein Code hier nicht auf IE6 scheint zu arbeiten, ein String oder ein RegExp sein, so dass sein:

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

wie die anderen gesagt, aber Die Verwendung von Regexen für solch eine einfache Operation ist übertrieben.

1

Ich weiß nicht, die genaue Syntax, aber Sie können das selbst herausfinden:

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

dies noch nicht getestet, aber wenn es funktioniert, es kümmert sich auch um nur ersetzt Vorkommen von ein einzelnes Zitat in einer Reihe. Der Modifikator g ist notwendig, um alle Vorkommen zu ersetzen.

+0

das funktioniert nicht. Aber ich will es auch wirklich, weil ich die Idee hinter der Idempotenz dieser Übersetzung mag. –

+0

Hier ist die Antwort: 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

Beachten Sie, wenn Sie nicht wollen, RegExp verwenden (und es gibt oft gute Gründe, nicht zu), das Idiom für einen einfachen String-Ersatz ist:

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

Obwohl die RegExp-Version In der Regel geringfügig schneller kann die String-Version ein Gewinn sein, wenn Sie nicht wissen, ob es Regex-Sonderzeichen (wie .) in der Suchzeichenfolge gibt.

+0

Ich benutzte IE7 und fragte mich, warum alle Antworten darüber nicht funktionierten. Sobald ich dieses str.split() implementiert hatte. Join() wurden alle meine Apostrophe korrekt ersetzt. Aus welchem ​​Grund auch immer wurde das "g" ignoriert. Danke bobince für den Austausch von Grundlagen! – fenix

3

Versuchen Sie folgendes:

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

nennen diese Methode wie folgt:

QuoteEncoding(strvalue); 
Verwandte Themen