Phương thức exec trong biểu thức chính quy JavaScript

Phương thức exec thực hiện tìm kiếm trong một chuỗi. Kết quả trả về là chuỗi con được tìm thấy và các nhóm bắt giữ (capturing groups) của nó. Mỗi lần gọi phương thức này sau đó sẽ bắt đầu tìm kiếm từ vị trí kết thúc của chuỗi con được tìm thấy trước đó.

Hãy xem xét một ví dụ. Giả sử chúng ta có chuỗi sau:

javascriptlet str = '12 34 56';

Giả sử chúng ta có biểu thức chính quy sau:

javascriptlet reg = /\d+/g;

Hãy gọi tuần tự phương thức của chúng ta cho chuỗi của chúng ta:

javascriptlet res1 = reg.exec(str);
console.log(res1[0]); // 12

let res2 = reg.exec(str);
console.log(res2[0]); // 34

let res3 = reg.exec(str);
console.log(res3[0]); // 56

Sau ba lần gọi, vì trong chuỗi của chúng ta không còn khớp nào với biểu thức chính quy nữa, nên lần gọi phương thức tiếp theo sẽ trả về null:

javascriptlet res4 = reg.exec(str);
console.log(res4); // null

Tính năng đặc biệt này của phương thức rất tiện lợi để sử dụng trong vòng lặp:

javascriptlet str = '12 34 56';
let reg = /\d+/g;

let res;
while (res = reg.exec(str)) {
  console.log(res); // [12], [34], [56] 
}

Có thể tìm thấy không chỉ kết quả khớp, mà còn phân tách nó thành các nhóm bắt giữ:

javascriptlet str = '12 34 56';
let reg = /(\d)(\d)/g;

let res;
while (res = reg.exec(str)) {
  console.log(res); // [12, 1, 2], [34, 3, 4], [56, 5, 6] 
}
Задание 1

Cho chuỗi sau:

javascriptlet str = '12:37:57 15:48:58 17:59:59';

Hãy tìm tất cả các chuỗi con chứa thời gian trong đó và với mỗi kết quả tìm được, hãy phân tách giờ, phút và giây thành các nhóm bắt giữ.