🥳 Regexp + 🥳

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

Định lượng + là một ký tự đặc biệt trong Regexp mà bắt buộc chúng ta phải nhớ.
js_masterRegular
Regular-Expression-trong-JavaScript.jpg

Chào các bạn

Trong bài viết này mình sẽ nói đến định lượng + nó cũng gần giống như * nhưng ý nghĩa lại khác.

Định lượng

Định lượng + là một ký tự đặc biệt trong đối tượng Regexp mà chúng ta cũng bắt buộc phải biết.

Cú pháp

1let number = "0123456789";
2
3let reg = /\d+/;
Trận đấuMô tả
/+/Ý nghĩa của nó là Một hoặc Nhiều

Trận đấu /\d+/ có ý nghĩa là có Một hoặc Nhiều chữ số.

  • Khớp với 0 đến 9 với 01 90 00000....1

Lưu Ý: điều quan trọng là bắt buộc phải có 1 chữ số trước. Theo sau đó thì bao nhiêu số nữa thì không quan trọng. Đến hết chuỗi luôn cũng được

1let number = "q01234 56789";
2
3let reg = /\d+/;
4
5let ketQua = number.match(reg);
6
7console.log(ketQua); // ['01234', index: 1, input: 'q01234 56789', groups: undefined]

Như các bạn có thể thấy vì không có cờ g nên kết quả chúng ta chỉ có chuỗi '01234' .

Nếu có cờ g thì hành vi của chức năng match() sẽ thay đổi.

1let number = "q01234 56789 x123y 0 -23t";
2
3let reg = /\d+/g; // Thêm cờ g
4
5let ketQua = number.match(reg);
6
7console.log(ketQua); // ['01234', '56789', '123', '0', '23']

Bây giờ đầu ra là mảng của chuỗi số. Nếu bạn muốn trả về kết một mảng bao gồm cả nhóm như khi không có cờ g thì cũng đơn giản.

1let number = "q01234 56789 x123y 0 -23t";
2
3let reg = /\d+/g; // Thêm cờ g
4
5let terator = number.matchAll(reg);
6
7let ketQua = [...terator]; 
8
9console.log(ketQua); // [Array(1), Array(1), Array(1), Array(1), Array(1)]
10
11// 0: ['01234', index: 1, input: 'q01234 56789 x123y 0 -23t', groups: undefined]
12// 1: ['56789', index: 7, input: 'q01234 56789 x123y 0 -23t', groups: undefined]
13// 2: ['123', index: 14, input: 'q01234 56789 x123y 0 -23t', groups: undefined]
14// 3: ['0', index: 19, input: 'q01234 56789 x123y 0 -23t', groups: undefined]
15// 4: ['23', index: 22, input: 'q01234 56789 x123y 0 -23t', groups: undefined]

Đơn nhiên chúng ta cũng có thể lặp qua nó bằng vòng lặp for of hoặc vòng lặp khác nếu thích.

1let number = "q01234 56789 x123y 0 -23t";
2
3let reg = /\d+/g; // Thêm cờ g
4
5let iterator = number.matchAll(reg);
6
7while (true) {
8    let { done, value } = iterator.next();
9    if (done) {
10        break;
11    }
12    console.log(value);
13    // ['01234', index: 1, input: 'q01234 56789 x123y 0 -23t', groups: undefined]
14    // ['56789', index: 7, input: 'q01234 56789 x123y 0 -23t', groups: undefined]
15    // ['123', index: 14, input: 'q01234 56789 x123y 0 -23t', groups: undefined]
16    // ['0', index: 19, input: 'q01234 56789 x123y 0 -23t', groups: undefined]
17    // ['23', index: 22, input: 'q01234 56789 x123y 0 -23t', groups: undefined]
18}

Và còn nhiều cách khác nữa. Và bây giờ chúng ta trở lại chủ đề chính là +.

Định lượng + này sẽ lấy Một hoặc Nhiều ký tự theo cách mà chúng ta định nghĩa.

1let number = `q01234 56789 x123y 0 -23t`;
2
3let reg = /.+/; 
4
5let ketQua = number.match(reg);
6
7console.log(ketQua); // ['q01234 56789 x123y 0 -23t', index: 0, input: 'q01234 56789 x123y 0 -23t', groups: undefined]
  • Trận đấu /.+/ có 2 ý nghĩa
    • . Khớp với bất kỳ ký tự nào ngoại trừ \n. Hành vi này có thể thay đổi bằng cờ s
    • + Một hoặc nhiều

Nếu chúng ta sữa chuỗi nguồn lại thì sẽ khác.

1let number = `q01234\n 56789 x123y 0 -23t`;
2
3let reg = /.+/; 
4
5let ketQua = number.match(reg);
6
7console.log(ketQua); // ['q01234', index: 0, input: 'q01234\n 56789 x123y 0 -23t', groups: undefined]

Ở ví dụ trên mình thêm \n vào chuỗi nguồn cho bạn dể thấy.

Nếu chúng ta thêm cờ g thì sẽ khác nữa

1let number = `q01234\n 56789 x123y 0 -23t`;
2
3let reg = /.+/g; 
4
5let ketQua = number.match(reg);
6
7console.log(ketQua); // ['q01234', ' 56789 x123y 0 -23t']

Kết quả bây giờ mảng của chúng ta có 2 giá trị.

Đơn nhiên nếu bây giờ chúng ta bỏ + đi thì đầu ra lại khác.

1let number = `q01234\n 56789 x123y 0 -23t`;
2
3let reg = /./g; 
4
5let ketQua = number.match(reg);
6
7console.log(ketQua); // ['q', '0', '1', '2', '3', '4', ' ', '5', '6', '7', '8', '9', ' ', 'x', '1', '2', '3', 'y', ' ', '0', ' ', '-', '2', '3', 't']

Trong regexp chúng ta hiểu ý nghĩa của ký tự đặc biệt là rất quan trọng. Vì từ những cái ký tự tưởng chừng nhỏ bé ấy. Nhưng hành vi của nó sẽ thay đỗ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ớ định lượng + có ý nghĩa Một hoặc Nhiều

  • Regexp
  • biểu thức
  • chuỗi
  • 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