⊗jsSpRERMC 127 of 294 menu

Callback trong phương thức replace của biểu thức chính quy JavaScript

Phương thức replace có thể nhận không chỉ một chuỗi mà còn cả một hàm callback làm tham số thứ hai, hàm này sẽ được áp dụng cho mỗi kết quả khớp tìm được. Mỗi chuỗi con mà biểu thức chính quy tìm thấy sẽ được thay thế bằng kết quả trả về của hàm đó cho chính chuỗi con đó.

Có thể truyền các tham số vào hàm này: tham số đầu tiên sẽ chứa chuỗi tìm được, tham số thứ hai - nhóm bắt thứ nhất, tham số thứ ba - nhóm bắt thứ hai và cứ thế - có thể tạo bao nhiêu tham số tương ứng với số nhóm bắt trong biểu thức chính quy.

Tham số áp chót sẽ chứa vị trí của kết quả khớp tìm được, và tham số cuối cùng - toàn bộ chuỗi mà việc tìm kiếm được thực hiện trên đó.

Cách tất cả những điều này hoạt động - chúng ta sẽ tìm hiểu qua các ví dụ thực tế.

Ví dụ

Cho một chuỗi với các số:

let str = '2 3 4 5';

Hãy thay thế các số này bằng bình phương của chúng. Đầu tiên, hãy chỉ đơn giản là in lần lượt các số của chúng ta ra console trong hàm callback:

str.replace(/\d+/g, function(match) { console.log(match); });

Mã của chúng ta sẽ in ra đầu tiên là '2', sau đó là '3', '4''5'. Tức là vào biến match lần lượt chứa những chuỗi mà biểu thức chính quy tìm thấy.

Hãy giải quyết bài toán đến cùng - chúng ta sẽ tính bình phương của match và trả về nó bằng cách sử dụng return. Kết quả là, với số 2 tìm được sẽ trả về 4 và số 2 sẽ được thay thế bằng số 4 này, với số 3 tìm được sẽ trả về 9 và số 3 sẽ được thay thế bằng số 9 này - và cứ thế tiếp tục:

let result = str.replace(/\d+/g, function (match) { return match**2; }); console.log(result); // in ra '4 9 16 25'

Ví dụ

Bây giờ giả sử trong chuỗi có các cấu trúc dạng '2+3=':

let str = '2+3= 4+5= 6+7=';

Hãy làm sao để sau dấu bằng chèn vào tổng của các số tương ứng. Tức là chuỗi của chúng ta phải biến đổi thành như sau:

'2+3=5 4+5=9 6+7=13'

Để giải bài toán, hãy lại thử nghiệm - tách số hạng thứ nhất và thứ hai vào các nhóm bắt riêng biệt:

str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) { console.log(match0, match1, match2); });

Và bây giờ hãy giải quyết bài toán một cách triệt để: với mỗi chuỗi con tìm được, hãy tính tổng nhóm bắt thứ nhất và thứ hai, lấy nhóm bắt thứ 0 (chuỗi tìm được, ví dụ '2+3='), thêm vào nó kết quả và trả về tất cả những thứ này thông qua return:

let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) { let sum = Number(match1) + Number(match2); return match0 + sum; }); console.log(result);

Bài tập thực hành

Cho chuỗi:

let str = 'aaa [2] bbb [3] ccc [12] ddd';

Tìm các số đứng trong ngoặc và tăng chúng lên gấp đôi. Tức là từ chuỗi của chúng ta phải nhận được kết quả sau:

'aaa [4] bbb [6] ccc [24] ddd'

Cho chuỗi:

let str = '123 456 789';

Tìm tất cả các số và đảo ngược các chữ số của chúng theo thứ tự ngược lại. Tức là từ chuỗi của chúng ta phải nhận được kết quả sau:

'321 654 987'

Cho chuỗi với các ngày tháng:

let str = '31.12.2025 30.11.2024 29.10.2023';

Tìm tất cả các ngày và chuyển đổi chúng sang một định dạng khác sao cho nhận được chuỗi sau:

'2025-12-31 2024-11-30 2023-10-29'
Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối