🦏 RegExp 🦏

Biể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 jsvascript
js_masterRegular
Regular-Expression-trong-JavaScript.jpg

Chào các bạn

Trong bài viết này chúng ta cùng nhau tìm hiểu về đối tượng Regexp

Cú pháp

1let reg = new RegExp(pattern, flags);
Tham sốMô tảTrả về
patternMột string hoặc một đối tượng chuỗi regexpobject
flagsCờ của regexpobject

hoặc Slashes dấu /

1let reg = /abc/; // Không có cờ

Tạo biểu thức Regexp

Để tạo biểu thức tìm kiếm các bạn có thể sử dụng 1 trong 2 cách trên.

new Regexp()

1let str = "Hồ Quang Trí";
2
3let reg1 = new RegExp("Quang");     // không có cờ
4let reg2 = new RegExp(/trí/, "i"); // Có cờ là i
5
6console.log(typeof reg1); // object

Slashes dấu /

1let str = "Hồ Quang Trí";
2
3let reg1 = /Quang/; // không có cờ
4let reg2 = /trí/i;  // Có cờ là i
5
6console.log(typeof reg1); // object

Thông thường thì dấu / được sử dụng thường xuyên hơn. Còn new RegExp() thực hiện điều gì đó mà tùy biến hơn.

1let str = "Hồ Quang Trí";
2
3let input = prompt("Nhập vào thứ bạn tìm");
4let reg = new RegExp(input, "i");
5
6let ketQua = str.match(reg); 
7
8console.log(ketQua); // ['T', index: 9, input: 'Hồ Quang Trí', groups: undefined]

Ví dụ ở trên là đầu vào do người dùng nhập. Nếu mình nhập t thì đầu ra sẽ như trên. Nó tùy biến cao hơn dấu /

Cờ

Cờ của biểu thức regexp có thể ảnh hưởng đến kết quả tìm kiếm của chúng ta.

  1. i

    • Nó giúp chúng ta tìm kiếm trong chuỗi không phân biệt ký tự HOA hoặc thường.
  2. g

    • Nó giúp chúng ta tìm kiếm toàn bộ trong chuỗi. Nếu không có cờ g thì chỉ có một kết quả đầu tiên được trả về.
  3. m

    • Nó giúp chúng ta tìm kiếm trên nhiều dòng khác nhau.
  4. s

    • Nó giúp cho chế độ dấu chấm . khớp với \n
  5. y

    • Nó giúp chúng ta tìm kiếm chính xác vị trí trong chuỗi.
  6. u

    • Cho phép hỗ trợ Unicode đầy đủ.

Trước mắt là vậy đã ở đây chúng ta nói ra lý thuyết trước. Sau đó từng bài sau mình sẻ đi từ từ từng cái mới giải thích hết được.

Phương pháp

Để thực hiện tìm kiếm trong chuỗi. Đối tượng Regexp có rất nhiều phương pháp

exec()

Phương phápMô Tả
exec()Thực hiện tìm kiếm trận đấu trong một chuỗi. Nó trả về một mảng kết quả hoặc null nếu không tìm thấy

Ví dụ:

1let str = "Hồ Quang Trí";
2
3let ketQua = /Quang/.exec(str);
4
5console.log(ketQua); // ['Quang', index: 3, input: 'Hồ Quang Trí', groups: undefined]
  • /Quang/ Trận đấu tìm kiếm
  • str Chuổi nguồn

test()

Phương phápMô Tả
test()Kiểm tra trận đấu trong một chuỗi. Nó trả về true hoặc false

Ví dụ:

1let str = "Hồ Quang Trí";
2
3let ketQua = /quang/i.test(str);
4
5console.log(ketQua); // true
  • /quang/i Trận đấu cần kiểm tra
  • str Chuỗi nguồn

Ở ví dụ trên mình đã tinh chỉnh hành vi của trận đấu bằng cờ i. Ngay bây giờ nó sẽ không phân biệt hoa hay thường. Tất cả đều bình đẳng.

search()

Phương phápMô Tả
search()Tìm kiếm trận đấu trong chuỗi. Trả về vị trí đầu tiên tìm thấy hoặc -1 nếu không tìm thấy

Ví dụ:

1let str = "Hồ Quang Trí";
2
3let ketQua = str.search(/Quang/);
4
5console.log(ketQua); // 3

match()

Phương phápMô Tả
match()Tìm kiếm trận đấu trong chuỗi. Trả về một mảng kết quả tìm thấy hoặc null. Cờ g cũng ảnh hưởng đến đầu ra của kết quả

Ví dụ:

Không có cờ g

1let str = "Hồ Quang Trí Hồ Quang Trí";
2
3let ketQua = str.match(/Quang/);
4
5console.log(ketQua); // ['Quang', index: 3, input: 'Hồ Quang Trí', groups: undefined]

Có cờ g

1let str = "Hồ Quang Trí Hồ Quang Trí";
2
3let ketQua = str.match(/Quang/g);
4
5console.log(ketQua); // ['Quang', 'Quang']

matchAll()

Phương phápMô Tả
matchAll()Tìm kiếm trận đấu. Trả về một đối tượng iterator cờ g là bắt buộc có

Ví dụ:

1let str = "Hồ Quang Trí Hồ Quang Trí";
2
3let iterable = str.matchAll(/Quang/g); // Cờ g là bắt buộc
4
5console.log(iterable.next()); // {value: ['Quang', index: 3, input: 'Hồ Quang Trí Hồ Quang Trí', groups: undefined, done: false}

Lưu ý: Nếu ví dụ trên ko có cờ g thì sẽ văng lỗi

1let str = "Hồ Quang Trí Hồ Quang Trí";
2
3let iterable = str.matchAll(/Quang/); // Uncaught TypeError: String.prototype.matchAll called with a non-global RegExp argument

split()

Phương phápMô Tả
split()Dùng để cắt chuổi theo trận đấu chúng ta chỉ định.

Ví dụ:

1let str = "Hồ Quang Trí";
2
3let ketQua = str.split(/\s/);
4
5console.log(ketQua); // ['Hồ', 'Quang', 'Trí']

\s ở trên là một lớp ký tự đặt biệt. Ở đây thì ý mình cắt chuỗi theo 1 kí tự khoảng trắng. Nhưng vì khó nhìn quá nên mình dùng \s cho bạn dể hình dung.

replace()

Phương phápMô Tả
replace()Thực hiện tìm kiếm và thay thế trong chuỗi. Cờ g thay đổi hành vi của nó. Trả về chuỗi mới.

Ví dụ:

Không có cờ g

1let str = "Hồ Quang Trí";
2
3let ketQua = str.replace(/\s/, '-'); // Thay thế ký tự khoảng trắng thành ký tự -
4
5console.log(ketQua); // Hồ-Quang Trí

Có cờ g

1let str = "Hồ Quang Trí";
2
3let ketQua = str.replace(/\s/g, '-'); // Thay thế ký tự khoảng trắng thành ký tự -
4
5console.log(ketQua); // Hồ-Quang-Trí

replaceAll()

Phương phápMô Tả
replaceAll()Thực hiện tìm kiếm và thay thế trong toàn bộ chuỗi. Cờ g là bắt buộc có. Trả về chuỗi mới

Ví dụ:

1let str = "Hồ Quang Trí";
2
3let ketQua = str.replaceAll(/\s/g, '-'); // Thay thế ký tự khoảng trắng thành ký tự -
4
5console.log(ketQua); // Hồ-Quang-Trí

Phương pháp này thì thật ra cũng không khác gì phương pháp replace() mà có cờ g cả.

Có vẽ nhiều và phức tạp phải không các bạn. Đơn nhiên chúng ta cũng phải từ từ mới hiểu được.

Lưu Ý: Tất cả ví dụ trên là mình chỉ demo cho các bạn xem cách sử dụng như thế nào thôi. Thật ra còn rất rất nhiều thứ nữa. Chúng ta sẽ tìm hiểu từ từ cách nó chạy sau.

Tổng kết

Trong bài viết này mình đã giới thiệu sơ lượt qua về đối tượng Regexp.

Ở đây cũng chỉ là khởi đầu nhỏ thôi. Còn rất rất là nhiều thứ phức tạp đằng sau nữa.

  • Regexp
  • string
  • object
  • mảng
  • chuổi

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