Nhìn trước tiêu cực 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ẽ nói về nhìn trước tiêu cực x(?!y). Trong đó x hoặc y là ký tự hoặc chuỗi hoặc cái gì đó thì tùy bạn.
Nhìn trước tiêu cực
Nhìn trước tiêu cực x(?!y) rất đơn giản là mỗi lần chạy x sẽ nhìn về phía trước coi có khác y hay không thôi.
Cú pháp
- Trận đấu /[0-9]+(?!đ)/
1let str = "Tôi có 10 và 100đ còn bạn thì sao? 1 hay 30đ"; 2 3let reg = /[0-9]+(?!đ)/; 4 5let ketQua = str.match(reg); 6 7console.log(ketQua); // ['10', index: 7, input: 'Tôi có 10 và 100đ còn bạn thì sao? 1 hay 30đ', groups: undefined]
Ý nghĩa của trận đấu /[0-9]+(?!đ)/ này là. Bắt đầu bất kỳ ký tự nào từ [0-9] tiếp theo là định lượng tham lam cộng + sẽ lấy tiếp nhiều số nhất có thể. Đến khi nào không phải là số [0-9] thì nhìn tiêu cực (?!đ) bắt đầu hỏi có phải là ký tự đ hay không. Nếu không có đ thì kết quả được trả về.
Nó cũng không có gì khó đúng không các bạn. Nói vậy thôi chứ lúc mới học mình cũng đâu biết gì về nó. Nhưng rồi lâu ngày kiên trì từng năm nên mình mới nhớ mới hiểu thôi.
Nếu chúng ta muốn lấy kết quả của toàn bộ thì chúng ta thêm cờ g cho nó.
- Trận đấu /[0-9]+(?!đ)/g
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); // ['10', '10', '1', '3']
Đến đây thì các bạn thắt mắt tại sao lại có số 10 và số 3 trong mảng kết quả đó. Mình cũng giải thích cho bạn hiểu luôn. Chả có gì khó cả đâu.
1// 100đ 2// [0-9]+(?!đ) 3// [0-9]+ => 1 4// 1[0-9]+ => 10 5// 10[0-9]+ => 100 6// 100[0-9]+ => 100đ 7// Đến đây thì định lượng + không chạy tiếp nữa. Mà bắt đầu đi lùi lại 8// 100đ 9// 100đ(?!đ) => 100 Vì đ = đ nên nhìn tiêu cực chúng ta không đúng. Nó lại lùi lại 1 bước nữa. 10// 100(?!đ) => 10 Bây gờ nó so 0 với đ khác nhau nên 10 được trả lại.
Nó cứ như vậy tương tự với số 3. Nhìn chung cách giải thích của mình cũng hơi khó hiểu thật. Các bạn chịu khó ngẫm tí cũng được.
Vì nhìn trước tiêu cực này cũng không có gì khó nên mình chỉ làm ví dụ vậy thôi.
Tổng kết
Trong bài viết này mình đã hướng dẫn cách mà nhìn trước tiêu cực x(?!y) hoạt động.
Các bạn chỉ cần nhớ cú pháp nó là ok rồi. Học các này cũng như làm nhà vậy. Cũng xây móng cũng lắp ghép từ từ vậy đó.
- nhìn trước
- nhìn sau
- string
- regular
- regexp
- object
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.RegularNhóm nội dung trong biểu thức chính quy Regexp
Nhóm () cũng là một ký tự đặc biệt trong Regular. Nó có rất nhiều thứ mà các bạn cần phải biết.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