Jadi saya membuat sejumlah besar objek javascript dengan sintaks literal dan saya lupa menggunakan tanda kutip untuk banyak kunci, banyak pasangan nilai kunci. Bagaimana saya menyusun regex untuk "menambahkan tanda kutip tunggal ke string yang tidak dikutip tunggal diikuti dengan segera dengan tanda titik dua" dalam vim?
Saya mencoba regex yang ditemukan di sini tetapi menambahkan seperangkat tanda kutip kosong setelah kunci.
Jawaban:
Saya akan mengira bahwa masing-masing kunci Anda: pasangan nilai berada pada barisnya sendiri, seperti:
Kemudian 2 regex / substitusi berikut memenuhi apa yang Anda butuhkan:
:%s/\(.*\):/'\1':/
diikuti oleh%s/''/'/
Yang pertama menggantikan semua teks yang mendahului titik dua (itu
\(.*\):
bagian) dengan teks yang sama (tetapi dikelilingi oleh tanda kutip) dan titik dua lagi ('\1':
bagian). Ini tidak memperhitungkan kunci apa pun yang sudah dikutip, sehingga perintah kedua hanya mengganti set dari 2 kutipan tunggal dengan hanya 1 kutipan tunggal.Perintah pertama tidak akan berfungsi jika Anda memiliki beberapa kunci: pasangan nilai pada satu baris. Jika demikian, Anda dapat mencoba sesuatu seperti di
:%s/, \(.*\):/, '\1':/
mana ada koma dan spasi di awal dua ekspresi. Anda masih harus membersihkan entri pertama di setiap objek, karena itu tidak didahului oleh koma.Apa pun perintah yang Anda gunakan, saya sarankan mengakhirinya dengan
/c
, karena dengan:%s/\(.*\):/'\1':/c
begitu Anda dapat mengonfirmasi setiap penggantian, setidaknya untuk memastikan itu berfungsi seperti yang Anda inginkan.Semoga berhasil!
sumber
sepertinya melakukan trik:
^.\{-}:\s*
cocok dengan semua nilai sebelum:\zs[^',]\+\
adalah pertandingan kami yang sebenarnya. Itu hanya cocok dengan nilainya, pada dasarnya sebanyak mungkin karakter apa pun yang bukan kutipan tunggal atau koma.'&'
mengganti pertandingan dengan sendirinya dikelilingi oleh tanda kutip tunggal.sumber