Visual Studio Code sử dụng hương vị gì?


130

Cố gắng tìm kiếm thay thế trong Visual Studio Code, tôi thấy rằng hương vị Regex của nó khác với Visual Studio đầy đủ. Cụ thể, tôi cố gắng khai báo một nhóm có tên vớistring (?<p>[\w]+) hoạt động trong Visual Studio nhưng không có trong Visual Studio Code. Nó sẽ khiếu nại với lỗi Invalid group.

Ngoài việc giải quyết vấn đề cụ thể này, tôi đang tìm kiếm thông tin về hương vị của Regexes trong Visual Studio Code và nơi tìm tài liệu về nó, vì vậy tôi có thể giúp mình với bất kỳ câu hỏi nào khác mà tôi có thể vấp phải.

Full Visual Studio sử dụng .NET Express Expressions như được ghi lại ở đây . Liên kết này được đề cập như tài liệu về Mã VS ở nơi khác trên Stackoverflow, nhưng không phải vậy.


VSCode đang sử dụng công cụ regex dựa trên JavaScript, nhưng nó không giống nhau. Bạn không thể sử dụng các nhóm bắt giữ có tên ở đó.
Wiktor Stribiżew

1
Không có tài liệu cụ thể về regex được sử dụng trong VSCode. Tuy nhiên, nếu bạn xem mã nguồn , bạn sẽ thấy rất nhiều mã JS xung quanh. Nếu bạn thử sử dụng lookbehind, bạn sẽ gặp lỗi mẫu không hợp lệ, trong khi lookahead hoạt động. Và hương vị regex của JS là công cụ regex duy nhất coi [^]mô hình là khớp với bất kỳ biểu tượng nào. Vì vậy, rõ ràng nó là công cụ regex JS.
Wiktor Stribiżew

5
Tiêu chuẩn là ECMAScript 5 .
Wiktor Stribiżew

1
ĐỒNG Ý. Chà nếu bạn chắc chắn và bạn có một số liên kết đến tài liệu bạn có thể trả lời. Tôi sẽ nâng cao. Đừng nghĩ rằng thông số ECMAScript là một liên kết tuyệt vời nếu đó là liên kết duy nhất.
Eric

1
Vì vậy, loại câu trả lời nào bạn mong đợi? Tất cả những gì tôi đã đăng ở trên + liên kết đến mô tả cú pháp regex của JS? Giống như tham chiếu MDN ?
Wiktor Stribiżew

Câu trả lời:


170

Rust Regex trong Sidebar Tìm / Thay thế trong Tệp

Rob Lourens của MSFT đã viết rằng tìm kiếm tệp sử dụng regex Rust. Các tài liệu ngôn ngữ Rust mô tả cú pháp.

Rob Lộ trên GitHub

Regex JavaScript trong Tìm / Thay thế trong Tiện ích tệp

Alexandru Dima của MSFT đã viết rằng widget find sử dụng regex JavaScript. Như Wicktor đã nhận xét, tài liệu của ECMAScript 5 mô tả cú pháp. Hướng dẫn biểu thức chính quy JavaScript MDN cũng vậy .

Alexandru Dima trên GitHub

Kiểm tra sự khác biệt

Thanh tìm kiếm trong tệp bên không hỗ trợ (?=foobar)trong khi tiện ích tìm trong tệp hỗ trợ cú pháp tìm kiếm đó.

Hiển thị giao diện làm việc trong tiện ích nhưng không có trong thanh bên.

Về Tìm / Thay thế bằng Nhóm

Để tìm / thay thế với các nhóm, sử dụng dấu ngoặc đơn ()để nhóm và $1, $2, $3,$n để thay thế.

Đây là một ví dụ.

Trước:

Đây là văn bản trước khi thay thế.

Sau:

Đây là văn bản sau khi thay thế.


12

Câu trả lời của Shaun vẫn đúng, tuy nhiên để thêm một bản cập nhật, gần đây VS Code đã thêm tùy chọn để chọn sử dụng công cụ PCRE2 dựa trên Perl . Bạn có thể kích hoạt điều này thông qua cấu hình cài đặt của bạn.

Điều này cho phép bạn thực hiện các hoạt động regex nâng cao hơn như nhìn và phản hồi . Nhưng như đã lưu ý dưới đây, regex vẫn phải là regex JavaScript hợp lệ .

Mã VS không hỗ trợ tìm kiếm biểu thức thông thường, tuy nhiên, phản hồi và tìm kiếm không được hỗ trợ theo mặc định. Nhưng bạn có thể kích hoạt những thứ này với cài đặt search.usePCRE2 . Điều này cấu hình ripgrep để sử dụng công cụ regex PCRE2. Mặc dù PCRE2 hỗ trợ nhiều tính năng khác, chúng tôi chỉ hỗ trợ các biểu thức regex vẫn còn hiệu lực trong JavaScript , bởi vì các trình soạn thảo mở vẫn được tìm kiếm bằng cách sử dụng tìm kiếm dựa trên JavaScript của trình soạn thảo.

để nhận tiền thưởng nếu bạn kết thúc ở đây cố gắng thực hiện tìm kiếm nhiều dòng, VS Code gần đây cũng đã thêm tính năng đó !

nhập mô tả hình ảnh ở đây


PCRE2 có thể được kích hoạt trong menu cài đặt. Chuyển đến Tùy chọn ~ Cài đặt và tìm kiếm 'regex'
DougR

Có vẻ như cài đặt đó không được dùng nữa và PCRE2 sẽ tự động được sử dụng làm dự phòng khi công cụ mặc định không hỗ trợ tính năng.
Kevin Rak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.