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.

Rakka Rage
sumber

Jawaban:

344

Diberikan ekspresi reguler (foobar)Anda dapat mereferensikan grup pertama menggunakan $1dan seterusnya jika Anda memiliki lebih banyak grup di bidang input ganti.

Benjamin Pasero
sumber
bertanya lagi berbeda di sini: stackoverflow.com/questions/35283300/…
Rakka Rage
4
Saya harus mengganti <p>(.*)</p>dengan <p>\n\t\t\t\t\t\t$1\n\t\t\t\t\t</p>untuk file 2000 baris. Bayangkan saya melakukannya secara manual.
Bishwas Mishra
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.

Shaun Luttin
sumber
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

Diogo Paschoal
sumber
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

Ares9323
sumber
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

Tedskovsky
sumber
2

Contoh sederhana lainnya:

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

Berguna untuk mengonversi HTML ke JSX dengan emosi / css!

Hedley Smith
sumber