Regex VSCode tìm và thay thế toán học con?


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

Tôi đang sử dụng lệnh tìm kiếm regex này và thay thế lệnh trong vim để trừ một hằng số từ mỗi id khớp.

Tôi có thể thực hiện regex find trong VSCode nhưng làm cách nào tôi có thể tham chiếu submatchtoán học & thay thế? submatch(1)không hoạt động trong VSCode?

Cảm ơn.

Câu trả lời:


344

Đưa ra một biểu thức chính quy của (foobar)bạn có thể tham chiếu nhóm đầu tiên bằng cách sử dụng $1và cứ thế nếu bạn có nhiều nhóm hơn trong trường nhập thay thế.


hỏi lại một cách khác biệt ở đây: stackoverflow.com/questions
35283300 / Cách

4
Tôi đã phải thay thế <p>(.*)</p>bằng <p>\n\t\t\t\t\t\t$1\n\t\t\t\t\t</p>cho một tập tin dòng 2000. Hãy tưởng tượng tôi làm nó bằng tay.
Bishwas Mishra

100

Để làm tăng câu trả lời của Benjamin bằng một ví dụ:

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

Bất cứ điều gì trong ngoặc đơn có thể là một biểu thức thông thường.


Điều này nhắc nhở tôi rằng tôi nên thoát khỏi dấu ngoặc đơn nếu tôi thực hiện regex trên câu lệnh if.
Đồng hồ

65

Chỉ cần thêm một ví dụ khác:

Tôi đã thay thế src attr trong các thẻ img html, nhưng tôi chỉ cần thay thế src và giữ bất kỳ văn bản nào giữa thuộc tính img và src.

Tôi đã sử dụng công cụ find + thay thế (ctrl + h) như trong hình ảnh: Tìm và thay thế


8
đối với tôi điều này hoạt động không nhất quán - mặc dù lựa chọn chính xác, đầu ra đôi khi vẫn $1không thay thế
godblessstrawberry

1
Xin chào, @godblessstrawberry, bạn có thể chia sẻ chuỗi tìm kiếm và thay thế của mình không?
Diogo Paschoal

2
hi @Diogo Tôi đã cố gắng thay thế projectwide \[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*"với myTranslate="$1"và nó đã bỏ qua các phím một cách ngẫu nhiên và chèn $ 1 thay vì giá trị nhóm đôi. cập nhật lên 1.28.0 đã giải quyết vấn đề này
godblessstrawberry

Tôi gặp vấn đề tương tự như @godblessstrawberry, thực hiện thay thế toàn cầu trên tất cả các tệp của mình bằng regex '(và | hoặc \ + | \ -) ​​\ n (*)' và chuỗi thay thế '\ n $ 2 $ 1' đôi khi chính xác đã chuyển toán tử nhị phân sang bắt đầu dòng mới nhưng trong các trường hợp khác chỉ cần chèn $ 2 $ 1. Sẽ xuất hiện một lỗi trong VSCodium
Tom Đóng

@godblessstrawberry, kiểm tra cái này: github.com/microsoft/vscode/issues/81825 . Nếu nó không áp dụng cho bạn, hãy cung cấp thêm thông tin và mở một vấn đề ở đó.
Diogo Paschoal

9

Trong trường hợp của tôi, $ 1 không hoạt động, nhưng $ 0 hoạt động tốt cho mục đích của tôi.

Trong trường hợp này, tôi đã cố gắng thay thế các chuỗi bằng định dạng chính xác để dịch chúng trong Laravel, tôi hy vọng điều này có thể hữu ích cho người khác vì tôi phải mất một thời gian để sắp xếp nó!

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

Regex Thay thế chuỗi cho bản dịch Laravel


1
Có thể cho bạn sao chép chỉnh sửa bài đăng của bạn và sao chép mã thay vì hình ảnh? Nó sẽ tốt hơn cho hình dung.
Pankwood

3

Đối với người mới bắt đầu, câu trả lời được chấp nhận là chính xác, nhưng hơi ngắn gọn nếu bạn không quen thuộc với VSC hoặc Regex.

Vì vậy, trong trường hợp đây là liên hệ đầu tiên của bạn với một trong hai:

Để tìm và sửa đổi văn bản,

  1. Trong bước "Tìm", bạn có thể sử dụng regex với "nhóm bắt" I want to find (group1) and (group2), ví dụ: sử dụng dấu ngoặc đơn. Điều này sẽ tìm thấy cùng một văn bản I want to find group1 and group2, nhưng với sự khác biệt mà sau đó bạn có thể tham khảo group1group2trong bước tiếp theo:

  2. Trong bước "Thay thế", bạn có thể tham khảo các nhóm bắt giữ thông qua $1, $2v.v. để bạn có thể thay đổi câu thành I found $1 and $2 having a picnic, câu này sẽ xuất raI found group1 and group2 having a picnic.

Ghi chú:

  • Thay vì chỉ là một chuỗi, bất cứ điều gì bên trong hoặc bên ngoài ()có thể là một biểu thức thông thường.

  • $0 đề cập đến toàn bộ trận đấu


2

Một ví dụ đơn giản khác:

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

Hữu ích cho việc chuyển đổi HTML sang JSX với cảm xúc / css!

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.