VSCode regex ค้นหาและแทนที่คณิตศาสตร์ที่ส่งหรือไม่


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

ฉันใช้การค้นหา regex นี้และแทนที่คำสั่งในกลุ่มเพื่อลบค่าคงที่จากแต่ละ id ที่ตรงกัน

ฉันสามารถค้นหา regex ใน VSCode ได้ แต่ฉันจะอ้างอิงsubmatchคณิตศาสตร์และแทนที่ได้อย่างไร submatch(1)ไม่ทำงานใน VSCode?

ขอบคุณ

คำตอบ:


351

ให้การแสดงออกปกติของ(foobar)คุณสามารถอ้างอิงกลุ่มแรกที่ใช้$1และอื่น ๆ หากคุณมีกลุ่มมากขึ้นในช่องใส่แทนที่


ถามอีกอย่างชัดเจนที่นี่: stackoverflow.com/questions/35283300/…
Rakka Rage

5
ฉันต้องแทนที่<p>(.*)</p>ด้วย<p>\n\t\t\t\t\t\t$1\n\t\t\t\t\t</p>ไฟล์บรรทัด 2,000 ลองนึกภาพฉันทำด้วยตนเอง
Bishwas Mishra

102

เพื่อเพิ่มคำตอบของเบนจามินด้วยตัวอย่าง:

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

สิ่งใดในวงเล็บอาจเป็นนิพจน์ทั่วไป


อันนี้เตือนฉันว่าฉันควรหลีกเลี่ยงวงเล็บถ้าฉันทำ regex บนถ้ามีคำสั่ง
ลาน

67

เพียงเพิ่มตัวอย่างอื่น:

ฉันกำลังแทนที่ src attr ในแท็ก img html แต่ฉันต้องการแทนที่ src เท่านั้นและเก็บข้อความใด ๆ ระหว่างการประกาศ img และแอตทริบิวต์ src

ฉันใช้เครื่องมือ find + replace (ctrl + h) ดังรูป: ค้นหาและแทนที่


8
สำหรับฉันงานนี้ไม่ลงรอยกัน - ถึงแม้ว่าการเลือกจะถูกต้อง แต่บางครั้งผลลัพธ์ก็$1ไม่เปลี่ยนแปลง
godblessstrawberry

1
สวัสดี @godblessstrawberry คุณสามารถแชร์สตริงการค้นหาและการแทนที่ได้หรือไม่
Diogo Paschoal

2
สวัสดี @Diogo ฉันพยายามที่จะแทนที่โปรเจคต์\[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*"ด้วยmyTranslate="$1"และมันก็ข้ามคีย์แบบสุ่มและใส่ $ 1 แทนค่ากลุ่มในบางครั้ง อัปเดตเป็น 1.28.0 แก้ไขปัญหานี้
godblessstrawberry

ฉันพบปัญหาเดียวกันกับ @godblessstrawberry การแทนที่แบบโกลบอลในไฟล์ทั้งหมดของฉันด้วย regex '(และ | หรือ \ + | \ -) ​​\ n (*)' และบางครั้งสตริงการแทนที่ '\ n $ 2 $ 1' อย่างถูกต้อง เลื่อนตัวดำเนินการไบนารีไปยังจุดเริ่มต้นของ newline แต่ในกรณีอื่น ๆ เพิ่งแทรก $ 2 $ 1 ดูเหมือนว่าจะเป็นข้อผิดพลาดใน VSCodium
Tom Close

@godblessstrawberry ตรวจสอบนี้: github.com/microsoft/vscode/issues/81825 หากไม่ได้ผลสำหรับคุณให้ข้อมูลเพิ่มเติมและเปิดปัญหาที่นั่น
Diogo Paschoal

10

ในกรณีของฉัน $ 1 ไม่ทำงาน แต่ $ 0 ใช้งานได้ดีสำหรับวัตถุประสงค์ของฉัน

ในกรณีนี้ฉันพยายามที่จะแทนที่สตริงด้วยรูปแบบที่ถูกต้องในการแปลพวกเขาใน Laravel ฉันหวังว่านี่จะเป็นประโยชน์กับคนอื่นเพราะมันใช้เวลาซักพักนึง!

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

Regex แทนที่สตริงสำหรับการแปล Laravel


1
เป็นไปได้หรือไม่ที่คุณจะคัดลอกแก้ไขโพสต์และคัดลอกรหัสแทนภาพ? มันจะดีกว่าสำหรับการสร้างภาพ
Pankwood

3

สำหรับผู้เริ่มต้นคำตอบที่ยอมรับนั้นถูกต้อง แต่ถ้าคุณไม่คุ้นเคยกับ VSC หรือ Regex

ดังนั้นในกรณีนี้การติดต่อครั้งแรกของคุณด้วย:

ในการค้นหาและแก้ไขข้อความ

  1. ในขั้นตอน "ค้นหา" คุณสามารถใช้ regex กับ "กลุ่มการจับภาพ" เช่นI want to find (group1) and (group2)ใช้วงเล็บ นี่จะเป็นข้อความเดียวI want to find group1 and group2กับ แต่มีความแตกต่างที่คุณสามารถอ้างอิงgroup1และgroup2ในขั้นตอนถัดไป:

  2. ใน "แทนที่" ขั้นตอนที่คุณสามารถดูกลุ่มจับผ่าน$1, $2ฯลฯ เพื่อให้คุณสามารถเปลี่ยนประโยคเพื่อI found $1 and $2 having a picnicที่จะส่งออกI found group1 and group2 having a picnic.

หมายเหตุ:

  • แทนที่จะเป็นสตริงสิ่งใดก็ตามที่อยู่ภายในหรือภายนอก()สามารถเป็นนิพจน์ทั่วไปได้

  • $0 หมายถึงการแข่งขันทั้งหมด


2

อีกตัวอย่างง่ายๆ:

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

มีประโยชน์สำหรับการแปลง HTML เป็น JSX ด้วยอารมณ์ / css!

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