VSCode regex mencari & mengganti matematika pengiriman?


204
%s@{fileID: \(213[0-9]*\)@\='{fileID: '.(submatch(1)-1900)@

Saya menggunakan pencarian regex ini dan mengganti perintah dalam vim untuk mengurangi konstanta dari setiap id yang cocok.

Saya dapat melakukan pencarian regex di VSCode tetapi bagaimana saya bisa referensi submatch untuk matematika & ganti? submatch(1)tidak berfungsi di VSCode?

Terima kasih.

Jawaban:



100

Untuk menambah jawaban Benjamin dengan sebuah contoh:

Find        Carrots(With)Dip(Are)Yummy
Replace     Bananas$1Mustard$2Gross
Result      BananasWithMustardAreGross

Apa pun di dalam tanda kurung bisa menjadi ekspresi reguler.


Yang ini mengingatkan saya bahwa saya harus melarikan diri dari kurung jika saya melakukan regex pada pernyataan if.
Clockwork

65

Tambahkan saja contoh lain:

Saya mengganti attr src di img tag html, tetapi saya hanya perlu mengganti src dan menyimpan teks antara deklarasi img dan atribut src.

Saya menggunakan alat temukan + ganti (ctrl + h) seperti pada gambar: Temukan dan ganti


8
bagi saya ini bekerja secara tidak konsisten - meskipun fork pemilihan benar, output terkadang tetap $1tanpa penggantian
godblessstrawberry

1
Hai, @godblessstrawberry, bisakah Anda membagikan string pencarian dan penggantian Anda?
Diogo Paschoal

2
hai @ Diogo Saya mencoba untuk mengganti projectwide \[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*"dengan myTranslate="$1"dan itu melewatkan kunci secara acak dan memasukkan $ 1 bukannya nilai grup kadang-kadang. perbarui ke 1.28.0 menyelesaikan masalah ini
godblessstrawberry

Saya mengalami masalah yang sama dengan @godblessstrawberry, melakukan penggantian global di semua file saya dengan regex '(dan | atau \ + | \ -) ​​\ n (*)' dan string pengganti '\ n $ 2 $ 1' terkadang dengan benar menggeser operator biner ke awal baris baru tetapi dalam kasus lain hanya memasukkan $ 2 $ 1. Tampaknya menjadi bug di VSCodium
Tom Close

@godblessstrawberry, periksa ini: github.com/microsoft/vscode/issues/81825 . Jika itu tidak berlaku untuk Anda, berikan lebih banyak info dan buka masalah di sana.
Diogo Paschoal

9

Dalam kasus saya $ 1 tidak berfungsi, tetapi $ 0 berfungsi dengan baik untuk tujuan saya.

Dalam hal ini saya mencoba untuk mengganti string dengan format yang benar untuk menerjemahkannya di Laravel, saya harap ini bisa bermanfaat bagi orang lain karena butuh beberapa saat untuk menyelesaikannya!

Search: (?<=<div>).*?(?=</div>)
Replace: {{ __('$0') }}

Regex Replace String untuk Terjemahan Laravel


1
Mungkinkah Anda menyalin edit Anda dan menyalin kode alih-alih gambar? Akan lebih baik untuk visualisasi.
Pankwood

3

Untuk pemula, jawaban yang diterima benar, tetapi sedikit singkat jika Anda tidak terbiasa dengan VSC atau Regex.

Jadi, jika ini adalah kontak pertama Anda dengan:

Untuk menemukan dan memodifikasi teks,

  1. Pada langkah "Temukan", Anda dapat menggunakan regex dengan "grup penangkap," misalnya I want to find (group1) and (group2), menggunakan tanda kurung. Ini akan menemukan teks yang sama dengan I want to find group1 and group2, tetapi dengan perbedaan yang Anda dapat referensi group1dan group2pada langkah selanjutnya:

  2. Pada langkah "Ganti", Anda dapat merujuk ke grup penangkap melalui $1, $2dll, sehingga Anda dapat mengubah kalimat I found $1 and $2 having a picnic, yang akan menghasilkanI found group1 and group2 having a picnic.

Catatan:

  • Alih-alih hanya string, apa pun di dalam atau di luar ()dapat berupa ekspresi reguler.

  • $0 mengacu pada seluruh pertandingan


2

Contoh sederhana lainnya:

Search: style="(.+?)"
Replace: css={css`$1`}

Berguna untuk mengonversi HTML ke JSX dengan emosi / css!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.