2016-04-10 9 views
0

Sagen wir, ich die Zeichenfolge haben:JS: Ersetzen Sie Zitate zwischen einem bestimmten Symbol

"Audio":[{"ID":"0","Codec": "AC-3","Info":"192 Kbps, 48.0 KHz (2 channels)","Language":"Spanish (##He aqui "el teléfono que nunca suena" pero debería##)","Default":"Yes"}] 

Und ich möchte in umwandeln:

"Audio":[{"ID":"0","Codec": "AC-3","Info":"192 Kbps, 48.0 KHz (2 channels)","Language":"Spanish (He aqui \"el teléfono que nunca suena\" pero debería)","Default":"Yes"}] 

Wie Sie sehen können, ich will alle entkommen die Zitate, die zwischen den "##" Symbolen existieren, entfernen zusätzlich diese Symbole, wie kann ich dies erreichen mit der replace() Methode? Ich meine, wie könnte das Regex-Muster sein. Dank

+3

Wie Sie mit dem ungültigen JSON in erster Linie am Ende haben? Es wäre wahrscheinlich einfacher, es dort zu reparieren, anstatt das Problem danach zu überarbeiten. – hvd

+0

Ich zweite das. Erstellen Sie JSON niemals "manuell". Verwenden Sie immer eine Datenstruktur und eine JSON-Serialisierungsfunktion und Sie werden diese Art von Problem nie haben. JSON-Serialisierung ist für jede halbwegs moderne Programmiersprache verfügbar. Es gibt keine Entschuldigung dafür, es nicht zu benutzen. – Tomalak

+0

stammt aus einer Vorlage für MediaInfo. Es gibt keine Möglichkeit, irgendeine Art von Format anzuwenden, ist nur einfacher Text, so dass die einzige Lösung für unerwartete Zitate, die ich gefunden habe, Felder mit "##" abgrenzen, also kann jemand eine tatsächliche Antwort haben? – user3529166

Antwort

1

Wenn Sie Absicht sind dies tut, dann

input.replace(/##(.*?)##/g, function(match) { return match.replace(/"/g, '\\"'); }) 

sollte die Arbeit machen.

Dies ersetzt alle ##...## Sequenzen mit dem Ergebnis der Ersetzung von Anführungszeichen in ihnen mit dem Escape-Zitat.

+0

Es sollte '/##(.*?)##/ g' – rock321987

+0

Es funktioniert, jetzt, wenn ich auch nur die ## Teil ... aber wie herausnehmen – user3529166

0
var str = '"Audio":[{"ID":"0","Codec": "AC-3","Info":"192 Kbps, 48.0 KHz (2 channels)","L##a"g##uage":"Spanish (##He aqui "el teléfono que nunca suena" pero debería##)","Default":"Yes"}]'; 
var result = str.replace(/##(.*?)##/g, function(v) { return v.replace(/"/g, "\\\""); }); 

print(result) 

Ideone Demo

Verwandte Themen