2009-09-16 15 views
12

Ich möchte die intelligenten Anführungszeichen wie , , und zu regulären Anführungszeichen ersetzen. Außerdem wollte ich die ©, ® und ersetzen. Ich habe den folgenden Code verwendet. Aber es hilft nicht. Bitte helfen Sie mir, dieses Problem zu lösen.Replace-Methode funktioniert nicht

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

Dies könnte ein Zeichencodierungsproblem sein. Welche Codierung verwenden Sie in Ihrem Code und welche Codierung hat Ihre Daten? – Gumbo

Antwort

28

Verwendung:

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

oder es in einer Erklärung zu tun:

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

In JavaScript (wie in vielen anderen Sprachen) Strings sind unveränderlich - Zeichenfolge "Ersatz" Methoden tatsächlich Gib einfach die neue Zeichenfolge zurück, anstatt die Zeichenfolge an Ort und Stelle zu ändern.

Die MDN JavaScript reference entry für replace Zustände:

Gibt eine neue Zeichenfolge mit einigen oder allen Spielen eines Musters durch einen Ersatz ersetzt.

...

Diese Methode es aufgerufen wird, nicht das String-Objekt ändern. Es gibt einfach eine neue Zeichenfolge zurück.

+2

siehe auch: https://developer.mozilla.org/de/Core_JavaScript_1.5_Reference/Objects/String/replace –

+0

Danke Jonathan - wird den Link zu der Antwort hinzufügen. –

+0

Jon, ich habe immer noch das gleiche Problem. –

3

replace Rück den resultierenden String

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

Das OP nicht sagen, warum es nicht funktioniert, aber es scheint, Probleme im Zusammenhang mit der Codierung der Datei zu sein. Wenn ich eine ANSI-codierte Datei haben, und ich tue:

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

ich:

"This is a test" "Another test" 

ich die Kodierung UTF-8 konvertiert, die typografische Anführungszeichen fixiert (die brach, als ich Codierung geändert), dann zurück zu ANSI konvertiert und das Problem ging weg.

Beachten Sie, dass, wenn ich kopiert und eingefügt, die Doppel- und Einzel typografische Anführungszeichen aus dieser Seite in mein Testdokument (ANSI codierte) und lief diesen Code:

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

Ich entdeckte, dass alle typographische auftauchten als ? = 63.

Also, zum OP, bestimmen, woher die intelligenten Zitate stammen und stellen Sie sicher, dass sie die Zeichencodes sind, die Sie erwarten, dass sie sind. Wenn dies nicht der Fall ist, erwägen Sie, die Codierung der Quelle so zu ändern, dass sie als “ = 8220, ” = 8221, ‘ = 8216 und ’ = 8217 eintrifft. Verwenden Sie meine Schleife, um die Quelle zu untersuchen. Wenn die intelligenten Anführungszeichen mit anderen Werten als den angegebenen charCodeAt() angezeigt werden, funktioniert replace() nicht wie geschrieben.

1

Um alle regulären Anführungszeichen durch intelligente Anführungszeichen zu ersetzen, verwende ich eine ähnliche Funktion. Sie müssen den CharCode angeben, da einige Standardeinstellungen verschiedener Computer/Browser die normalen Zeichen möglicherweise unterschiedlich kennzeichnen ("", ",", ').

Mit dem CharCode mit Aufruf das ASCII-Zeichen, das den Raum für Fehler über verschiedene Browser und Betriebssysteme beseitigt. Dies ist auch hilfreich für den zweisprachigen Gebrauch (Akzente usw.).

typografische Anführungszeichen ersetzen mit SINGLE

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

ZITATE die anderen ASCII-Werte zu finden, die Sie benötigen. Überprüfen Sie here.

Verwandte Themen