Visual Studio Code hangi Regex çeşidini kullanır?


130

Visual Studio Code'da arama-değiştirmeye çalışırken, Regex çeşidinin tam Visual Studio'dan farklı olduğunu görüyorum. Özellikle, string (?<p>[\w]+)Visual Studio'da çalışan ancak Visual Studio Code'da çalışmayan bir adlandırılmış grup bildirmeye çalışıyorum. Hatadan şikayet edecek Invalid group.

Bu belirli sorunu çözmenin yanı sıra, Visual Studio Code'daki Regexes'in çeşidi ve bununla ilgili belgeleri nerede bulacağım hakkında bilgi arıyorum, böylece karşılaşabileceğim diğer sorularda kendime yardımcı olabilirim.

Tam Visual Studio, burada belgelendiği gibi .NET Normal İfadeleri kullanır . Bu bağlantı, Stackoverflow'da başka yerlerde VS Code için dokümantasyon olarak bahsedilir, ancak değildir.


VSCode, JavaScript tabanlı normal ifade motorunu kullanıyor, ancak aynı değil. Orada adlandırılmış yakalama gruplarını kullanamazsınız.
Wiktor Stribiżew

1
VSCode'da kullanılan normal ifade ile ilgili belirli bir belge yoktur. Bununla birlikte, kaynak koduna bakarsanız, etrafta çok sayıda JS kodu göreceksiniz. Geriye bakmayı kullanmayı denerseniz, önden okuma çalışırken geçersiz kalıp hatası alırsınız. Ve JS normal ifade çeşidi, [^]deseni herhangi bir sembolle eşleşiyormuş gibi ele alan tek normal ifade motorudur . Yani, JS regex motoru olduğu açıktır.
Wiktor Stribiżew


1
TAMAM. Eminseniz ve yanıtlayabileceğiniz bazı dokümanlara bağlantılarınız varsa. Oy vereceğim. ECMAScript spesifikasyonunun tek olmasına rağmen harika bir bağlantı olduğunu düşünmeyin.
Eric

1
Peki ne tür bir cevap bekliyorsunuz? Yukarıda yayınladığım her şey + JS normal ifade sözdizimi açıklamasına bağlantı? Gibi MDN referansı ?
Wiktor Stribiżew

Yanıtlar:


171

Dosyalarda Bul / Değiştir Kenar Çubuğundaki Rust Regex

MSFT'den Rob Lourens , dosya aramasının Rust regex kullandığını yazdı. Pas dil belgelerine sözdizimi.

GitHub'da Rob Lourens

Dosya Pencere Öğesinde Bul / Değiştir içindeki JavaScript Normal İfadesi

MSFT'den Alexandru Dima , bulma gerecinin JavaScript normal ifadesini kullandığını yazdı. Wicktor'ın yorumladığı gibi, ECMAScript 5'in dokümantasyonu sözdizimini açıklar. Yani yapar MDN JavaScript Normal İfade Kılavuzu .

GitHub'da Alexandru Dima

Farkı Test Edin

Dosyalarda bul kenar çubuğu desteklemez, (?=foobar)oysa dosyada bul gereci bu ileri-geri sözdizimini destekler.

Kenar çubuğunda değil, widget'ta çalışan bir ileri bakış gösterir.

Gruplarla Bul / Değiştir ile ilgili

Gruplar, kullanım parantez ile değiştirin / bulmak için ()gruba ve $1, $2, $3, $nyerine.

İşte bir örnek.

Önce:

Bu, değiştirmeden önceki metindir.

Sonra:

Bu, değiştirmeden sonraki metindir.


12

Shaun'un cevabı hala doğru, ancak bir güncelleme eklemek için, yakın zamanda VS Code Perl tabanlı PCRE2 motorunu kullanmayı seçme seçeneğini ekledi . Bunu ayar yapılandırmanız aracılığıyla etkinleştirebilirsiniz.

Bu, önden referanslar ve geri başvurular gibi daha gelişmiş normal ifade işlemlerini gerçekleştirmenize olanak tanır . Ancak aşağıda belirtildiği gibi, normal ifadenin yine de geçerli JavaScript normal ifadesi olması gerekir .

VS Code, normal ifade aramalarını destekler, ancak geri başvurular ve etrafa bakma varsayılan olarak desteklenmez. Ancak bunları search.usePCRE2 ayarıyla etkinleştirebilirsiniz . Bu, ripgrep'i PCRE2 normal ifade motorunu kullanacak şekilde yapılandırır. PCRE2 diğer birçok özelliği desteklese de, yalnızca JavaScript'te hala geçerli olan normal ifade ifadelerini destekliyoruz , çünkü açık düzenleyiciler, düzenleyicinin JavaScript tabanlı araması kullanılarak hala aranmaktadır.

Ve bir bonus olarak , burada çok satırlı aramalar yapmaya çalıştığınızda sona erdiyseniz, VS Code son zamanlarda bu özelliği de ekledi !

görüntü açıklamasını buraya girin


PCRE2, ayarlar menüsünde etkinleştirilebilir. Tercihler ~ Ayarlar'a gidin ve '
regex'i

Görünüşe göre bu ayar kullanımdan kaldırılmış ve PCRE2, varsayılan motor bir özelliği desteklemediğinde otomatik olarak yedek olarak kullanılıyor.
Kevin Rak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.