Ich habe also eine große Anzahl von JavaScript-Objekten mit wörtlicher Syntax erstellt und vergessen, Anführungszeichen für die Schlüssel vieler, vieler Schlüssel-Wert-Paare zu verwenden. Wie würde ich in Vim einen regulären Ausdruck entwickeln, um „einfache Anführungszeichen zu jeder Zeichenfolge ohne einfache Anführungszeichen hinzuzufügen, unmittelbar gefolgt von einem Doppelpunkt“?
Ich habe versucht, den gefundenen regulären AusdruckHieraber es hängt nach dem Schlüssel einen leeren Anführungszeichensatz an.
Antwort1
Ich gehe davon aus, dass jedes Ihrer Schlüssel-Wert-Paare in einer eigenen Zeile steht, etwa so:
var myObject = {
key1:val1,
key2:val2,
};
Dann erreichen die folgenden 2 Regex/Ersetzungen, was Sie brauchen:
:%s/\(.*\):/'\1':/
gefolgt von%s/''/'/
Der erste Befehl ersetzt allen Text, der einem Doppelpunkt vorangeht (das ist der \(.*\):
Teil), durch denselben Text (aber in Anführungszeichen) und erneut den Doppelpunkt (der '\1':
Teil). Dabei werden keine Schlüssel berücksichtigt, die bereits in Anführungszeichen stehen, daher ersetzt der zweite Befehl einfach jeden Satz von 2 einfachen Anführungszeichen durch nur 1 einfaches Anführungszeichen.
Der erste Befehl funktioniert nicht, wenn Sie mehrere Schlüssel:Wert-Paare in einer Zeile haben. In diesem Fall können Sie etwas ausprobieren, :%s/, \(.*\):/, '\1':/
bei dem am Anfang der beiden Ausdrücke ein Komma und ein Leerzeichen steht. Sie müssten trotzdem den ersten Eintrag in jedem Objekt bereinigen, da diesen keine Kommas vorangestellt sind.
Welchen Befehl Sie auch immer verwenden, ich empfehle, ihn mit zu beenden /c
, damit :%s/\(.*\):/'\1':/c
Sie jede Ersetzung bestätigen können, zumindest um sicherzustellen, dass sie wie gewünscht funktioniert.
Viel Glück!
Antwort2
:%s/^.\{-}:\s*\zs[^',]\+/'&'
scheint zu funktionieren:
^.\{-}:\s*
passt zu allem vor dem Wert:^ | .\{-}: | \s* ---------------+---------------------+-------------------- start of line | any character, | as much whitespace | as few as possible, | as possible | until the 1st colon |
\zs[^',]\+\
ist unsere tatsächliche Übereinstimmung. Sie stimmt nur mit dem Wert überein, grundsätzlich mit so vielen Zeichen wie möglich, die kein einfaches Anführungszeichen oder Komma sind.'&'
ersetzt die Übereinstimmung durch sich selbst, umgeben von einfachen Anführungszeichen.