Chuyển đến nội dung chính
Mô-đun 7 · Bài học 3 trong tổng số 427/32 trong khóa học~12 min
Bài học theo mô-đun (3/4)

Thay thế bằng một cuộc gọi lại

Nếu chuỗi thay thế không đủ, hãy truyền hàm: str.replace(regex, (match, ...groups) => string). Cuộc gọi lại được gọi cho mỗi trận đấu và giá trị trả về của nó sẽ trở thành giá trị thay thế.

JS
'prezzi: 10 20 30'.replace(/\d+/g, (m) => Number(m) * 1.22);
// "prezzi: 12.2 24.4 36.6" (22% VAT)

Đối số gọi lại

JS
str.replace(regex, (match, p1, p2, ..., offset, original, groups) => ...);
  • match -- toàn bộ trận đấu.
  • p1, p2, \u2026 -- các nhóm đã bắt theo thứ tự.
  • offset -- chỉ mục của kết quả khớp trong chuỗi gốc.
  • original -- toàn bộ chuỗi.
  • groups -- đối tượng với các nhóm được đặt tên (nếu có).
JS
'2024-03-15'.replace(/(\d{4})-(\d{2})-(\d{2})/, (_, a, m, g) => `${g}/${m}/${a}`);
// "15/03/2024"

Lệnh gọi lại cung cấp cho bạn sức mạnh tùy ý: phân tích cú pháp, tra cứu, chuyển đổi, HTML thoát\u2026 mọi thứ mà chuỗi tĩnh không thể làm được.

Đối số nâng cao trong lệnh gọi lại thay thế

Hàm gọi lại nhận được một số đối số: kết quả khớp đầy đủ, từng nhóm được ghi lại, phần bù của kết quả khớp trong toàn bộ văn bản và chuỗi đầu vào ban đầu. Điều này cho phép logic chuyển đổi dựa trên ngữ cảnh phức tạp.

Hãy thử nó

tập thể dục#regex.m7.l3.e1
Nỗ lực: 0Đang tải…

Tìm mọi số nguyên trong văn bản. (Để thay thế, bạn sẽ chuyển `(m) => Number(m) * 2` để nhân đôi nó.)

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng \\d+ (một hoặc nhiều chữ số) để nắm bắt mọi số nguyên dưới dạng một kết quả khớp.

Giải pháp khả dụng sau 3 lần thử

Xem lại bài tập

tập thể dục#regex.m7.l3.e2
Nỗ lực: 0Đang tải…

Tìm mọi email (dạng đơn giản: chữ cái/chữ số/dấu chấm/dấu gạch dưới @ tên miền). Bằng cách này, lệnh gọi lại có thể điều chỉnh lại thành `***@domain`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Mở rộng lớp thành [\\w.]+ để chấp nhận các dấu chấm trong tên người dùng và tên miền.

Giải pháp khả dụng sau 3 lần thử

Thử thách bổ sung

tập thể dục#regex.m7.l3.e3
Nỗ lực: 0Đang tải…

Match every word consisting of letters in the text, so it can be transformed to uppercase via a callback.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Tìm các chữ cái đơn giản với [a-zA-Z]+.

Giải pháp khả dụng sau 3 lần thử