Visual Studio Code ใช้รสชาติใดของ Regex


130

พยายามค้นหา - แทนที่ใน Visual Studio Code ฉันพบว่ารสชาติ Regex นั้นแตกต่างจาก Visual Studio ทั้งหมด โดยเฉพาะฉันพยายามประกาศกลุ่มที่มีชื่อstring (?<p>[\w]+)ซึ่งทำงานใน Visual Studio แต่ไม่ใช่ใน Visual Studio Code Invalid groupมันจะบ่นกับข้อผิดพลาด

นอกเหนือจากการแก้ไขปัญหาเฉพาะนี้ฉันกำลังมองหาข้อมูลเกี่ยวกับรสชาติของ Regexes ใน Visual Studio Code และจะหาเอกสารเกี่ยวกับเรื่องนี้ได้ที่ไหนดังนั้นฉันจึงสามารถช่วยตัวเองด้วยคำถามอื่น ๆ ที่อาจพบเจอ

เต็มรูปแบบการใช้งานของ Visual Studio .NET นิพจน์ปกติเป็นเอกสารที่นี่ ลิงก์นี้ถูกกล่าวถึงเป็นเอกสารสำหรับ VS Code ที่อื่นใน Stackoverflow แต่ไม่ใช่


VSCode ใช้เอนจิ้น regex ที่ใช้ JavaScript แต่มันไม่เหมือนกัน คุณไม่สามารถใช้กลุ่มการจับที่ตั้งชื่อได้ที่นั่น
Wiktor Stribiżew

1
ไม่มีเอกสารเฉพาะเกี่ยวกับ regex ที่ใช้ใน VSCode อย่างไรก็ตามหากคุณดูซอร์สโค้ดคุณจะเห็นโค้ด JS จำนวนมากอยู่รอบ ๆ หากคุณลองใช้ lookbehinds คุณจะได้รับข้อผิดพลาดของรูปแบบที่ไม่ถูกต้องในขณะที่ lookaheads ทำงาน และรส JS regex เป็นเอนจิ้น regex เดียวที่ถือว่า[^]รูปแบบตรงกับสัญลักษณ์ใด ๆ ดังนั้นจึงเห็นได้ชัดว่ามันคือเอ็นจิ้น JS regex
Wiktor Stribiżew

5
มาตรฐานเป็นECMAScript 5
Wiktor Stribiżew

1
ตกลง. ถ้าคุณแน่ใจและคุณมีลิงก์ไปยังเอกสารที่คุณสามารถตอบได้ ฉันจะโหวตให้ อย่าคิดว่าข้อมูลจำเพาะของ ECMAScript เป็นลิงค์ที่ยอดเยี่ยมหากเป็นเพียงตัวเดียว
Eric

1
คุณคาดหวังคำตอบแบบไหน สิ่งที่ฉันโพสต์ไว้ด้านบน + ลิงค์ไปยังคำอธิบายไวยากรณ์ JS regex? ชอบการอ้างอิง MDNหรือไม่?
Wiktor Stribiżew

คำตอบ:


171

Rust Regex ในแถบค้นหา / แทนที่ในไฟล์ด้านข้าง

Rob Lourens จาก MSFTเขียนว่าการค้นหาไฟล์ใช้ Rust regex เอกสารภาษาสนิมอธิบายไวยากรณ์

Rob Lourens บน GitHub

JavaScript Regex ใน Find / Replace in File Widget

Alexandru Dima จาก MSFTเขียนว่า find widget ใช้ JavaScript regex ตามที่ Wicktor แสดงความคิดเห็นเอกสารของ ECMAScript 5 จะอธิบายถึงไวยากรณ์ คู่มือนิพจน์ทั่วไปของMDN JavaScript ก็เช่นกัน

Alexandru Dima บน GitHub

ทดสอบความแตกต่าง

แถบด้านข้าง find in files ไม่รองรับ(?=foobar)ในขณะที่วิดเจ็ต find in file รองรับไวยากรณ์ lookahead นั้น

แสดงผู้มองหาที่ทำงานในวิดเจ็ต แต่ไม่ใช่ในแถบด้านข้าง

เกี่ยวกับการค้นหา / แทนที่ด้วยกลุ่ม

เพื่อหา / แทนที่กับกลุ่มใช้วงเล็บ()ให้กับกลุ่มและ$1, $2, $3, $nจะเข้ามาแทนที่

นี่คือตัวอย่าง

ก่อน:

นี่คือข้อความก่อนแทนที่

หลังจาก:

นี่คือข้อความหลังการแทนที่


12

คำตอบที่ฌอนของยังคงเป็นที่ถูกต้อง แต่จะเพิ่มการปรับปรุงเมื่อเร็ว ๆ นี้ VS รหัสเพิ่มตัวเลือกในการเลือกใช้เครื่องมือ PCRE2 ตาม Perl คุณสามารถเปิดใช้งานผ่านการกำหนดค่าการตั้งค่าของคุณ

นี้จะช่วยให้คุณในการดำเนิน regex ขั้นสูงมากขึ้นเช่นlookaheads และ backreferences แต่เป็นข้อสังเกตด้านล่าง regex ยังจะต้องมีความถูกต้อง regex

VS Code รองรับการค้นหานิพจน์ทั่วไปอย่างไรก็ตามค่าเริ่มต้นจะไม่รองรับการอ้างอิงย้อนกลับและการค้นหาโดยค่าเริ่มต้น แต่คุณสามารถเปิดใช้งานเหล่านี้ด้วยการตั้งค่าsearch.usePCRE2 สิ่งนี้กำหนดค่าให้ ripgrep ใช้เอนจิ้น PCRE2 regex แม้ว่า PCRE2 จะรองรับคุณสมบัติอื่น ๆ อีกมากมาย แต่เราสนับสนุนเฉพาะนิพจน์ regex ที่ยังใช้ได้ใน JavaScriptเท่านั้นเนื่องจากตัวแก้ไขแบบเปิดยังคงค้นหาโดยใช้การค้นหาโดยใช้ JavaScript ของตัวแก้ไข

และสำหรับโบนัสหากคุณพยายามค้นหาหลายบรรทัดVS Code ก็เพิ่งเพิ่มคุณสมบัตินั้นเช่นกัน !

ป้อนคำอธิบายภาพที่นี่


PCRE2 สามารถเปิดใช้งานได้ในเมนูการตั้งค่า ไปที่ Preferences ~ Settings และค้นหา "regex"
DougR

ดูเหมือนว่าการตั้งค่านั้นจะเลิกใช้งานแล้วและ PCRE2 จะถูกใช้เป็นทางเลือกโดยอัตโนมัติเมื่อเอ็นจิ้นเริ่มต้นไม่รองรับคุณสมบัติ
Kevin Rak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.