Định lượng hỏi trong biểu thức chính quy Regexp
Chào các bạn
Trong bài viết này mình sẽ hướng dẫn các bạn về định lượng ?
Định lượng
Định lượng ? trong đối tượng Regexp chúng ta cũng gặp rất nhiều. Nó chỉ là ký hiệu đặc biệt. Nhưng nó có ý nghĩa. Mà muốn làm việc được với regexp thì bắt buộc chúng ta phải biết ý nghĩa của nó.
Cú Pháp
1let str = "Hồ Quang Trí"; 2 3let reg = /Tr?í/
Trận đấu /Tr?í/ này có ý nghĩa là bắt đầu ký tự T có 0 hoặc 1 r theo sau đó là í
- Khớp với Trí Tí
1let str = "Hồ Tí Quang Trí"; 2 3let reg = /Tr?í/ 4 5let ketQua = str.match(reg); 6 7console.log(typeof(reg)); // object 8console.log(ketQua); // ['Tí', index: 3, input: 'Hồ Tí Quang Trí', groups: undefined]
Như đã giải thích ý nghĩa của ? ở trên. Đầu ra của chúng ta có một mảng các giá trị. Cái này thật chất do chất do chức năng match() khi không có cờ g . Khi có cờ g thì đầu ra chúng ta sẽ khác.
1let str = "Hồ Tí Quang Trí"; 2 3let reg = /Tr?í/g; // them cờ g 4 5let ketQua = str.match(reg); 6 7console.log(typeof(reg)); // object 8console.log(ketQua); // ['Tí', 'Trí']
Nhờ có cờ g mà chúng ta đã thay đổi hành vi của chức năng match(). Bây giờ chức năng match() sẽ trả về đúng kết quả chúng ta cần tìm.
Nếu chúng ta muốn biết cả vị trí xuất hiện cũng như nhóm như trong ví dụ trên mà không có cờ g thì chúng ta có thể dùng phương pháp matchAll()
1let str = "Hồ Tí Quang Trí"; 2 3let reg = /Tr?í/g; // them cờ g 4 5let iterable = str.matchAll(reg); 6 7for(let ketQua of iterable) { 8 console.log(ketQua); 9 // ['Tí', index: 3, input: 'Hồ Tí Quang Trí', groups: undefined] 10 // ['Trí', index: 12, input: 'Hồ Tí Quang Trí', groups: undefined] 11}
Vì chức năng matchAll() trả về đối tượng iterable nên có thể hoạt động được với vòng lặp for of
Nếu các bạn chưa biết về đối tượng iterable này là gì thì các bạn có thể xem thêm về nó tại đây iterable
Ngoài ra chúng ta có thể dùng phương pháp exec()
1let str = "Hồ Tí Quang Trí"; 2 3let reg = /Tr?í/g; // them cờ g 4 5let ketQua = []; 6 7while (ketQua) { 8 ketQua = reg.exec(str); 9 console.log(ketQua); 10 // ['Tí', index: 3, input: 'Hồ Tí Quang Trí', groups: undefined] 11 // ['Trí', index: 12, input: 'Hồ Tí Quang Trí', groups: undefined] 12 // null 13}
Các bạn để ý kỹ sẽ thấy. Bình thường trận đấu của chúng ta là như thế này.
- str.matchAll(reg) Chuỗi nguồn chấm đến chức năng truyền vào trận đấu.
Nhưng với chức năng exec() thì lại khác.
- reg.exec(str) Trận đấu chấm đến chức năng truyền vào chuỗi str
Đơn nhiên trong bài viết này mình đang nói về định lượng ? nên chúng ta cứ nên tập trung vào nó thì hay hơn.
Và còn nhiều thứ ở đằng sau nữa. Để tránh trình trạng nhồi nhét nhiều kiến thức trong một bài viết vào ảnh hưởng đến tâm trí. Nên mình chỉ nói đến đây thôi.
Tổng kết.
Trong bài viết này mình đã nói về định lượng ? . Nhiệm vụ của các bạn chỉ cần nhớ ? chính là Không hoặc Một
- định lượng hỏi
- sao
- regexp
- string
- object
Các bài viết liên quan
Các phương pháp tỉnh Object.keys values entries
Cùng nhau tìm hiểu về các phương pháp tỉnh Object.keys() Object.values() Object.entries()JavascriptSố trong javascript
Number là một lớp đại diện số học trong javascriptJavascriptBiểu thức chính quy Regular trong javascript
Đối tượng Regexp cung cấp các phương pháp mạnh mẽ để tìm kiếm và thay thế văn bản trong jsvascriptRegularLớp ký tự đặc biệt trong chuỗi string và regexp
Để làm việc với chuỗi string và regexp một cách hoàn hảo và mạnh mẽ. Các bạn bắt buộc phải hiểu về nó.RegularĐịnh lượng sao * trong biểu thức chính quy Regexp
Định lượng * trong regexp rất phức tạp. Nó có thể thay đổi cách chúng ta tìm kiếm.Regular