😎 Regexp ? 😎

Định lượng hỏi trong biểu thức chính quy Regexp

Định lượng hỏi ? là một ký tự đặc biệt trong Regexp và nó có ý nghĩa là gì ?
js_masterRegular
Regular-Expression-trong-JavaScript.jpg

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?í/
Ký hiệuMô tả
/?/Ý nghĩa của nó là Không hoặc Một

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í
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

OFFJS.COM - Blog học tập giải trí - 🐲

Chia sẻ nhiều kiến thức thú vị trong lập trình cũng như cuộc sống.

Giới thiệu


Trang web này mình sẽ nói về kiến thức lập trình và cuộc sống mà các bạn mới học hay đang dự định học. Có một bước đi đầu đời vững chắc.

Hồ Quang Trí.jpg

Đi kèm với đó là những lý thuyết và các dòng code minh họa. Để các bạn dễ hình dung.

Đơn nhiên cũng không dễ dàng ngày một ngày hai mà học hết được.

Học Tập Là Một Con Đường Dài Vô Tận

Nó sẽ nuốt các bạn vô số thời gian nhưng bù lại khi đã biết thì mọi thứ thật là tuyệt.

1console.log("Hồ Quang Trí");

Nếu có ai nói bạn học lập trình trong vòng 3 đến 6 tháng thì mình xin nói thật không bao giờ có chuyện đó nhé.

Chúc các bạn thành công.

Chân trang

phone-toan-phat.png

0353210168

address-toan-phat.png

Việt Nam