VSCode regex bulmak ve submatch matematik yerine?


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

Eşleşen her id gelen bir sabit çıkarmak için vim içinde bu regex arama ve değiştirme komutunu kullanıyorum.

Ben regex VSCode bulmak yapabilirim ama nasıl submatchmatematik için başvuru ve değiştirin? submatch(1)VSCode çalışmıyor?

Teşekkürler.

Yanıtlar:



102

Benjamin'in cevabını bir örnekle arttırmak için:

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

Parantez içindeki herhangi bir şey düzenli bir ifade olabilir.


Bu bana if ifadesi üzerinde bir regex yapıyorsam parantez kaçmak gerektiğini hatırlattı.
Clockwork

67

Başka bir örnek daha eklemek için:

Img html etiketleri src attr yerine, ama sadece src değiştirmek ve img bildirimi ve src özniteliği arasında herhangi bir metin tutmak gerekiyordu.

Resimdeki gibi find + replace aracını (ctrl + h) kullandım: Bul ve Değiştir


8
benim için bu tutarsız bir şekilde çalışıyor - seçim çatalları doğru olsa da, çıktı bazen $1değiştirilmeden
kalır

1
Merhaba, @godblessstrawberry, arama ve değiştirme dizelerinizi paylaşabilir misiniz?
Diogo Paschoal

2
hi @Diogo ben projectwide yerine çalışıyordu \[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*"ile myTranslate="$1"ve rastgele tuşlara atlama ve bazen $ 1 yerine grup değerini ekleyerek. 1.28.0'a güncelleme bu sorunu çözdü
godblessstrawberry

@Godblessstrawberry ile aynı problemle karşılaştım, regex '(ve | veya \ + | \ -) ​​\ n (*)' ve bazen '\ n $ 2 $ 1' yedek dizesiyle tüm dosyalarım arasında genel bir değişiklik yaptım ikili operatörü yeni satırın başına kaydırdı, ancak diğer durumlarda 2 $ 1 $ ekledi. VSCodium bir hata gibi görünüyor
Tom Close

@godblessstrawberry, şunu kontrol edin: github.com/microsoft/vscode/issues/81825 . Sizin için geçerli değilse, daha fazla bilgi sağlayın ve orada bir sorun açın.
Diogo Paschoal

10

Benim durumumda 1 $ işe yaramadı, ama 0 $ benim amacım için iyi çalışıyor.

Bu durumda dizeleri Laravel'de çevirmek için doğru formatla değiştirmeye çalışıyordum, umarım bu başka birine faydalı olabilir, çünkü bunu çözmek biraz zaman aldı!

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

Laravel Çeviri için Regex Replace String


1
Gönderinizi düzenlemeniz ve resim yerine kodu kopyalamanız mümkün mü? Görselleştirme için daha iyi olurdu.
Pankwood

3

Yeni başlayanlar için kabul edilen cevap doğrudur, ancak VSC veya Regex'e aşina değilseniz biraz eğiktir.

Yani, bu ikisinden biriyle ilk temasınız ise:

Metin bulmak ve değiştirmek için ,

  1. "Bul" adımında, regex'i "yakalama grupları" ile, örneğin I want to find (group1) and (group2)parantez kullanarak kullanabilirsiniz. Bu aynı metni bulur I want to find group1 and group2, ama fark ile daha sonra başvuruda bulunabilir group1ve group2bir sonraki adımda:

  2. "Değiştir" adımda, aracılığıyla yakalama gruplarına başvurabilirsiniz $1, $2size cümleyi değiştirmek böylece, vb I found $1 and $2 having a picnichangi çıkış alacaktı,I found group1 and group2 having a picnic.

Notlar:

  • Yalnızca bir dize yerine, içindeki veya dışındaki herhangi bir şey ()normal bir ifade olabilir.

  • $0 tüm maçı ifade eder


2

Başka bir basit örnek:

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

Duygu / css ile HTML'yi JSX'e dönüştürmek için kullanışlıdır!

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.