😵‍💫 Nhìn Trước 😵‍💫

Nhìn trước trong biểu thức chính quy Regular

Nhìn trước x(?=y) cũng là một kỹ thuật rất quan trọng. Bắt buộc bạn phải biết.
js_masterRegular
Regular-Expression-trong-JavaScript.jpg

Chào các bạn

Trong bài viết này mình sẻ viết bài về nhìn trước x(?=y). Trong đó x hoặc y là ký tự hoặc chuỗi hoặc cái gì đó tùy bạn.

Nhìn trước

Nhìn trước x(?=y) là một kỹ thuật rất quan trọng. Nếu các bạn học Regexp thì cũng bắt buộc bạn phải biết. Nó có rất rất là nhiều cái lợi. Chúng ta cùng nhau đi tìm hiểu nó nhé.

Cú pháp

1let str = "Hồ Quang Trí";
2
3let reg = /.+(?=\s)/
Trận đấuMô tả
/x(?=y)/Mỗi lần chạy x sẽ nhìn về trước xem đó có phải là y không.

Ví dụ:

  • Trận đấu /.+(?=\s)/
1let str = "Hồ Quang Trí";
2
3let reg = /.+(?=\s)/
4
5let ketQua = reg.exec(str);
6
7console.log(ketQua); // ['Hồ Quang', index: 0, input: 'Hồ Quang Trí', groups: undefined]

Ý nghĩa trận đấu /.+(?=\s)/ là. Bắt đầu bằng bất kỳ ký tự nào ngoại trừ một dòng mới \n đó là ký tự đặc biệt chấm . tiếp theo là định lượng tham lam cộng + sẽ chạy đến hết chuỗi, đến khi nào gặp \n thì thôi. Bây giờ thì nó sẽ đi lùi lại đến khi nào gặp \s thì trả về kết quả hoặc null.

Có vẻ khó hiểu đúng không các bạn. Bây giờ mình sẽ nói cách nó chạy cho các bạn bằng code.

1// Hồ Quang Trí
2// /.+(?=\s)/
3// .+  => H
4// H.+ => ồ
5// Hồ.+ => \s
6// Hồ\s.+ => Q
7// Hồ Q.+ => u
8// Hồ Qu.+ => a
9// Hồ Qua.+ => n
10// Hồ Quan.+ => g
11// Hồ Quang.+ => \s
12// Hồ Quang\s.+ => T
13// Hồ Quang T.+ => r
14// Hồ Quang Tr.+ => í
15// Hồ Quang Trí.+ => \n
16// Đến đây thì hết chuỗi. Nhưng trận đấu chúng ta vẫn còn. Định lượng tham lam + nó đi lùi lại.
17// Hồ Quang Trí
18// ............+(?=\s) => Hồ Quang Tr
19// ...........+(?=\s) => Hồ Quang T
20// ..........+(?=\s) => Hồ Quang\s
21// .........+(?=\s) => Hồ Quang
22// Hồ Quang

Nhìn có vẽ phức tạp đúng không các bạn. Nhưng không sao. Đó là cách mình hình dung thôi. Còn thuật toán thì sao mà mình biết được.

Nhưng mà cũng đúng đó. Nếu không đúng thì tại sao không phải Hồ mà lại Hồ Quang. Cho nên bắt buộc chúng ta phải hiểu từng ý nghĩa của từng định lượng.

Áp dụng

Ý nghĩa của nhìn trước /x(?=y)/ chỉ có vậy. Nên bây giờ mình ví dụ cái này cho các bạn hiểu rõ hơn.

Ví dụ: Chúng ta có một chuỗi str. Trong chuỗi str đó bao gồm cả chữ và số. Trong số đó có vài số kết thúc bằng đ. Nhiệm vụ của chúng ta là lấy ra tất cả các số kết thúc bằng đ đó.

1let str = "Tôi có 10 và 100đ còn bạn thì sao? 1 hay 30đ";
2
3let reg = /[0-9]+(?=đ)/g;
4
5let ketQua = str.match(reg);
6
7console.log(ketQua); // ['100', '30']

Vậy là xong cũng không có gì khó đúng không các bạn. Mình cũng nên giải thích trận đấu /[0-9]+(?=đ)/g cho các bạn hiểu rõ tí.

Trận đấuÝ nghĩa
/[0-9]+(?=đ)/gBắt đầu bằng 0 đến 9 tiếp theo định lượng + lặp lại Một hoặc Nhiều các số từ 0 đến 9 đó. Đến khi nào không phải là số nữa thì (?=đ) bắt đầu áp dụng. Cứ như vậy nếu có (?=đ) thì kết quả đó được trả về. Và cờ g lại bắt đầu ý nghĩa của trận đấu từ đầu lại. Chạy cho đến hết chuỗi thì thôi. Không có thì null được trả về.

Đơn nhiên là các bạn có thể dùng nhiều phương pháp khác để áp dụng.

1let str = "Tôi có 10 và 100đ còn bạn thì sao? 1 hay 30đ";
2
3let reg = /[0-9]+(?=đ)/g;
4
5let ketQua = str.matchAll(reg);
6
7console.log([...ketQua]);
8
9// [
10//    ['100', index: 13, input: 'Tôi có 10 và 100đ còn bạn thì sao? 1 hay 30đ', groups: undefined]
11//    ['30', index: 41, input: 'Tôi có 10 và 100đ còn bạn thì sao? 1 hay 30đ', groups: undefined]
12// ]

Và còn nhiều phương pháp khác nữa. tùy thuộc vào bạn. Với mình thì chừng đó là đủ rồi.

Tổng kết

Trong bài viết này mình đã nói cho các bạn về nhìn trước x(?=y). Các bạn cũng nên nhớ nó vào tâm trí nhé.

Đối tượng Regexp có rất rất là nhiều thứ phải nhớ. Và cái ấy chắc phải cần nhiều thời gian. Trừ khi nào bạn là thiên tài.

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

  • regular
  • string
  • object
  • number

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