Nhìn sau trong biểu thức chính quy Regular
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
- 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 z có Mộ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
Các bài viết liên quan
Phạm vi ngoặc vuông trong biểu thức chính quy Regexp
Phạm vi [] trong regexp rất quan trọng. Nó có rất rất là nhiều ý nghĩa.RegularLoại trừ bộ nhớ khỏi nhóm trong biểu thức chính quy Regular
Để loại trừ bộ nhớ khỏi nhóm thì chúng ta dùng (?:). Đi kèm với đó thì mất đi cơ hội.RegularĐị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ì ?RegularTruy cập nhóm theo thứ tự trong biểu thức chính quy Regexp
Nhóm () cũng có thứ tự. Và để truy cập vào bộ nhớ của nhóm thì dùng \nRegularĐị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ớ.Regular