🔴 Regexp 🔴

Nhìn sau trong biểu thức chính quy Regular

Nhìn sau (?<=y)x là một kỹ thuật rất phổ biến. Bắt buộc bạn phải biết, nó rất rất là lợi hại
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ìn sau (?<=y)x. Nó cũng là một cũng cú pháp đặt biệt. Mà cũng bắt buộc bạn phải biết nếu muốn làm việc với Regular một cách đẳng cấp.

Nhìn sau

Nhìn sau (?<=y)x trong đối tượng Regexp sẻ giúp cho chúng ta rất rất là nhiều thứ. Đặc biệt là nó sẻ nhìn về sau xem đó có phải là thứ chúng ta muốn hay không.

Cú pháp

1let str = "Hồ Quang Trí"
2
3let reg = /(?<=\s)[a-z]+/i
Cú phápMô tả
(?<=y)xNhìn sau x sẻ hỏi phía sau có phải là y hay không. Ký tự xy có thể là bất kỳ cái gì tùy vào cách chúng ta định nghĩa.
  • Trận đấu /(?<=\s)[a-z]+/i
1let str = "Hồ Quang Trí"
2
3let reg = /(?<=\s)[a-z]+/i
4
5let ketQua = reg.exec(str);
6
7console.log(ketQua); // ['Quang', index: 3, input: 'Hồ Quang Trí', groups: undefined]

Ý nghĩa của trận đấu /(?<=\s)[a-z]+/i này là. Bắt đầu bằng ký tự a đến zMột hoặc Nhiều + ký tự như vậy liên tiếp. Cờ i giúp trận đấu không phân biệt Hoa hoặc Thường. Khi mà định lượng + không phù hợp nữa thì nó nhìn về sau (?<=\s) hỏi có phải \s ở sau không. Nếu đúng thì trả về kết quả. Mếu không chạy hết chuỗi và trả về null.

Tại sao lại gọi là nhìn sau (?<=y)x ở đây. Mình sẽ giải thích cho các bạn hiểu. Để có cái nhìn tường minh hơn.

1/**
2 *    <-      Hồ Quang Trí    ->
3 * (?<=y)x       <=>        x(?=y)
4 * 
5 *   ^                        ^
6 *   |                        |
7 * Nhìn sau               Nhìn trước
8 * 
9 */

Như các bạn thấy trong ví dụ trên. Đó chính là cách nhìn của nó. Vì mình chưa thêm vẽ bản đồ trong markdown nên nó cũng bất tiện. Các bạn cứ xem tạm vậy. Biết đâu tương lai sẽ có. Viết tài liệu hướng dẫn rất là khó. Đặc biệt là làm sao giải thích dể hiểu nhất lại càng khó.

Đơn nhiên \s ở trận đấu trên mình có thể thay thế cái gì thì tùy theo cách của các bạn.

  • Trận đấu /(?<=(Quang|Nói)).+?\s/i
1let str = "Hồ Quang Trí Đang nói về nhìn sau Trong regexp"
2
3let reg = /(?<=(Quang|Nói)).+?\s/i
4
5let ketQua = reg.exec(str);
6
7console.log(ketQua); // [' Trí ', 'Quang', index: 8, input: 'Hồ Quang Trí Đang nói về nhìn sau Trong regexp', groups: undefined]

Bây giờ thì các bạn nhìn thấy trận đấu chúng ta có vẽ phức tạp rồi đúng không ạ. Nó chưa là gì đâu. Nếu mà chúng ta gộp tất cả lại từ bài viết đầu tiên đến bây giờ của chương Regular này thì bạn sẽ ngợp luôn.

Ý nghĩa của trận đấu /(?<=(Quang|Nói)).+?\s/i này là. Dấu chấm . bất kỳ ký tự nào ngoài dòng mới \n tiếp theo là định lượng tham lam cộng + nhưng bây giờ kèm định lượng hỏi ? ở sau. Nên bây giờ nó thành chế độ lười biến +?. Mỗi lần chạy chế độ lười biến sẻ xem phía trước có phải là \s hay không. Nếu đó là \s thì bây giờ nhìn sau (?<=(Quang|Nói)) sẻ xem đó có phải là Quang hoặc Nói hay không. Nếu đúng thì trả về. Nếu không thì chạy hết chuỗi. Cờ i ở đây giúp cho trận đấu chúng ta không phân biệt Hoa thường

  • Trận đấu /(?<=(Quang|Nói)).+?\s/i
1let str = "Hồ QUANG Trí Đang nói về nhìn sau Trong regexp"
2
3let reg = /(?<=(Quang|Nói)).+?\s/i
4
5let ketQua = reg.exec(str);
6
7console.log(ketQua); // [' Trí ', 'QUANG', index: 8, input: 'Hồ QUANG Trí Đang nói về nhìn sau Trong regexp', groups: undefined]

Ở ví dụ trên mình thay từ Quang thành QUANG trong chuỗi nguồn str cho bạn dể hình dung.

Các bạn để ý kỷ đầu ra kết quả, ngay vị trí 1 là QUANG. Tại sao nó lại xuất hiện trong kết quả của chúng ta. Rất đơn giản cái này là do nhóm () gây ra. Và nhóm chúng ta là (Quang|Nói). Nếu bạn chưa biết gì về nhóm thì xem tại đây Nhóm

Nếu bạn muốn lấy ra toàn bộ kết quả của trận đấu thì cứ thêm cờ g cho nó.

1let str = "Hồ QUANG Trí Đang nói về nhìn sau Trong regexp";
2
3let reg = /(?<=(Quang|Nói)).+?\s/gi;
4
5while (true) {
6    let ketQua = reg.exec(str);
7    if (!ketQua) {
8        break;
9    }
10    console.log(ketQua);
11    // [' Trí ', 'QUANG', index: 8, input: 'Hồ QUANG Trí Đang nói về nhìn sau Trong regexp', groups: undefined]
12    // [' về ', 'nói', index: 21, input: 'Hồ QUANG Trí Đang nói về nhìn sau Trong regexp', groups: undefined]
13}

Ví dụ trên mình dùng phương pháp exec() nhé các bạn. Các bạn có thể thử nó với phương pháp khác.

Tổng kết

Trong bài viết này mình đã nói về nhìn sau (?<=y)x trong biểu thức chính quy Regexp.

Nhiệm vụ của các bạn chỉ cần nhớ nó. Nhớ cú pháp của nó. Nói chung là bắt buộc phải nhớ.

Tất cả các bài viết về Regular này bắt buộc cái gì bạn cũng phải nhớ hết. Nếu mà không nhớ thì làm sao mà bạn đọc được trận đấu.

Ok hẹn gặp lại bạn ở bài sau nhé.

  • nhìn trước
  • nhìn sau
  • regexp
  • object
  • function

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