Apa rasa Regex yang digunakan Visual Studio Code?

130

Mencoba mencari-ganti dalam Visual Studio Code, saya menemukan bahwa rasanya Regex berbeda dari Visual Studio penuh. Secara khusus, saya mencoba untuk mendeklarasikan grup bernama string (?<p>[\w]+)yang bekerja di Visual Studio tetapi tidak dalam Visual Studio Code. Itu akan mengeluh dengan kesalahan Invalid group.

Terlepas dari menyelesaikan masalah khusus ini, saya mencari informasi tentang rasa Regex dalam Visual Studio Code dan di mana menemukan dokumentasi tentang hal itu, jadi saya dapat membantu diri sendiri dengan pertanyaan lain yang mungkin saya temui.

Full Visual Studio menggunakan .NET Regular Expressions seperti yang didokumentasikan di sini . Tautan ini disebutkan sebagai dokumentasi untuk Kode VS di tempat lain di Stackoverflow, tetapi tidak.

Eric
sumber
VSCode menggunakan mesin regex berbasis JavaScript, tetapi tidak sama. Anda tidak dapat menggunakan grup penangkap bernama di sana.
Wiktor Stribiżew
1
Tidak ada dokumentasi khusus tentang regex yang digunakan dalam VSCode. Namun, jika Anda melihat kode sumbernya , Anda akan melihat banyak kode JS di sekitarnya. Jika Anda mencoba menggunakan lookbehinds, Anda mendapatkan kesalahan pola yang tidak valid, sementara lookaheads berfungsi. Dan rasa JS regex adalah satu-satunya mesin regex yang memperlakukan [^]pola sebagai simbol yang cocok. Jadi, jelas itu adalah mesin JS regex.
Wiktor Stribiżew
5
Standarnya adalah ECMAScript 5 .
Wiktor Stribiżew
1
BAIK. Ya, jika Anda yakin dan Anda memiliki beberapa tautan ke dokumen, Anda dapat menjawab. Saya akan menang. Jangan berpikir spec ECMAScript adalah tautan yang bagus jika hanya itu saja.
Eric
1
Jadi, jawaban seperti apa yang Anda harapkan? Semua yang saya posting di atas + tautan ke deskripsi sintaks JS regex? Suka referensi MDN ?
Wiktor Stribiżew

Jawaban:

170

Rust Regex di Bilah Sisi Cari / Ganti File

Rob Lourens dari MSFT menulis bahwa pencarian file menggunakan Rust regex. The Rust dokumentasi bahasa menggambarkan sintaks.

Rob Lourens di GitHub

JavaScript Regex di Find / Replace in File Widget

Alexandru Dima dari MSFT menulis bahwa widget find menggunakan JavaScript regex. Seperti komentar Wicktor, dokumentasi ECMAScript 5 menjelaskan sintaksis. Begitu juga dengan Panduan Ekspresi Reguler JavaScript MDN .

Alexandru Dima di GitHub

Uji Perbedaannya

Temuan di sidebar file tidak mendukung (?=foobar) sedangkan find di widget file tidak mendukung sintaks lookahead.

Memperlihatkan lookahead yang bekerja di widget tetapi tidak di sidebar.

Mengenai Temukan / Ganti dengan Grup

Untuk mencari / ganti dengan kelompok, penggunaan tanda kurung ()untuk kelompok dan $1, $2, $3, $nuntuk menggantikan.

Berikut ini sebuah contoh.

Sebelum:

Ini adalah teks sebelum ganti.

Setelah:

Ini adalah teks setelah diganti.

Shaun Luttin
sumber
12

Jawaban Shaun masih benar, namun untuk menambahkan pembaruan, baru-baru ini VS Code menambahkan opsi untuk memilih menggunakan mesin PCRE2 berbasis Perl . Anda dapat mengaktifkan ini melalui konfigurasi pengaturan Anda.

Ini memungkinkan Anda untuk melakukan operasi regex yang lebih canggih seperti lookaheads dan backreferences . Tetapi seperti disebutkan di bawah, regex masih harus merupakan regex JavaScript yang valid .

VS Code memang mendukung pencarian ekspresi reguler, namun, backreferences dan lookaround tidak didukung secara default. Tetapi Anda dapat mengaktifkannya dengan pengaturan search.usePCRE2 . Ini mengkonfigurasi ripgrep untuk menggunakan mesin regre PCRE2. Sementara PCRE2 mendukung banyak fitur lain, kami hanya mendukung ekspresi regex yang masih valid dalam JavaScript , karena editor terbuka masih dicari menggunakan pencarian berbasis JavaScript editor.

Dan untuk bonus jika Anda berakhir di sini mencoba melakukan pencarian multi-jalur, VS Code baru-baru ini menambahkan fitur itu juga !

masukkan deskripsi gambar di sini

protoEvangelion
sumber
PCRE2 dapat diaktifkan di menu pengaturan. Pergi ke Preferensi ~ Pengaturan dan cari 'regex'
DougR
Sepertinya pengaturan itu sudah usang , dan PCRE2 secara otomatis digunakan sebagai mundur ketika mesin default tidak mendukung fitur.
Kevin Rak