そこで、リテラル構文を使用して多数の JavaScript オブジェクトを作成しましたが、多数のキーと値のペアのキーに引用符を使用するのを忘れました。vim で「単一引用符で囲まれていない文字列に単一引用符を追加し、その直後にコロンを追加する」正規表現を作成するにはどうすればよいでしょうか。
見つかった正規表現を試してみましたここただし、キーの後に空の引用符が追加されます。
答え1
次のように、各キーと値のペアが独自の行にあると仮定します。
var myObject = {
key1:val1,
key2:val2,
};
:%s/\(.*\):/'\1':/
次に、次の2つの正規表現/置換で必要な処理を実行します。
%s/''/'/
最初のコマンドは、コロン (その\(.*\):
部分) より前のすべてのテキストを、同じテキスト (ただし引用符で囲まれている) と再びコロン (その'\1':
部分) に置き換えます。これは、すでに引用符で囲まれているキーを考慮しないため、2 番目のコマンドは、2 つの単一引用符のセットを 1 つの単一引用符に置き換えるだけです。
1 行に複数のキーと値のペアがある場合、最初のコマンドは機能しません。その場合は、:%s/, \(.*\):/, '\1':/
2 つの式の先頭にカンマとスペースがあるようなコマンドを試してみてください。各オブジェクトの最初のエントリはカンマで始まっていないため、クリーンアップする必要があります。
/c
どのコマンドを使用する場合でも、のように で終了することをお勧めします:%s/\(.*\):/'\1':/c
。こうすることで、各置換を確認して、少なくとも希望どおりに動作することを確認できます。
幸運を!
答え2
:%s/^.\{-}:\s*\zs[^',]\+/'&'
うまくいくようです:
^.\{-}:\s*
値の前のすべてに一致します:^ | .\{-}: | \s* ---------------+---------------------+-------------------- start of line | any character, | as much whitespace | as few as possible, | as possible | until the 1st colon |
\zs[^',]\+\
実際の一致です。基本的には、一重引用符やカンマ以外の文字の値のみに一致します。'&'
一重引用符で囲まれた一致をそれ自体で置き換えます。