Cẩm Nang Toàn Tập: Làm Chủ Biểu Thức Chính Quy (Regular Expressions)
Biểu thức chính quy (thường gọi tắt là Regex hoặc Regexp) là một trong những công cụ xử lý chuỗi văn bản quyền năng nhất mà mọi kỹ sư phần mềm đều cần thành thạo. Từ việc xác thực form đăng ký, tìm kiếm log server cho đến trích xuất dữ liệu, Regex giúp hoàn thành tác vụ chỉ với 1 dòng biểu thức duy nhất.
1. Cú pháp và các ký tự đặc biệt trong Regex
Mỗi ký tự trong một biểu thức regex mang ý nghĩa quy định cấu trúc chuỗi mục tiêu:
| Ký tự | Ý nghĩa kỹ thuật | Ví dụ minh họa |
|---|---|---|
| ^ | Khớp với điểm bắt đầu của dòng hoặc chuỗi | ^Hello (chỉ khớp chuỗi bắt đầu bằng Hello) |
| $ | Khớp với điểm kết thúc của dòng hoặc chuỗi | end$ (chỉ khớp chuỗi kết thúc bằng end) |
| \d | Khớp với bất kỳ chữ số nào (tương đương [0-9]) | \d4 (khớp năm 4 chữ số: 2026) |
| \w | Khớp với ký tự từ (chữ cái, chữ số và dấu gạch dưới) | \w+ (khớp từ hoàn chỉnh) |
| + | Khớp từ 1 lần trở lên (ít nhất 1 lần xuất hiện) | a+ (khớp 'a', 'aa', 'aaa') |
| * | Khớp từ 0 lần trở lên (có thể không xuất hiện) | ba* (khớp 'b', 'ba', 'baa') |
| ? | Khớp 0 hoặc 1 lần (tùy chọn xuất hiện) | https? (khớp cả http và https) |
2. Các cờ bổ trợ (Regex Flags)
- g (Global): Tìm kiếm tất cả các kết quả trùng khớp trong toàn bộ văn bản, thay vì dừng lại ở kết quả đầu tiên.
- i (Ignore Case): Tìm kiếm không phân biệt chữ hoa và chữ thường (ví dụ: `[a-z]` sẽ khớp cả `A-Z`).
- m (Multiline): Cho phép ký tự `^` và `$` khớp ở đầu và cuối của từng dòng riêng biệt thay vì toàn bộ chuỗi.
3. Cảnh báo an ninh: Tránh bẫy ReDoS (Catastrophic Backtracking)
Một lỗi nghiêm trọng trong việc viết Regex là Catastrophic Backtracking. Khi một biểu thức chứa nhiều nhóm lặp lồng nhau (nested quantifiers) như (a+)+$, gặp phải chuỗi đầu vào độc hại, engine Regex sẽ phải tính toán hàng triệu nhánh quay lui, làm CPU server bị quá tải (100% CPU usage) và gây ra tấn công từ chối dịch vụ (ReDoS - Regular Expression Denial of Service).
Giải pháp: Luôn viết biểu thức có tính xác định cao, hạn chế nhóm lặp lồng nhau và đặt timeout cho quá trình thực thi Regex.
4. Câu hỏi thường gặp (FAQ)
Công cụ Regex Studio này xử lý ở đâu?
Toàn bộ thuật toán kiểm thử được thực thi ngay trong JavaScript runtime của trình duyệt. Không có bất kỳ dữ liệu văn bản kiểm thử nào được gửi về máy chủ.
Làm thế nào để kiểm tra mật khẩu có độ phức tạp cao bằng Regex?
Bạn nên sử dụng kỹ thuật Positive Lookahead (?=...) để kiểm tra đồng thời nhiều điều kiện độc lập (chữ hoa, chữ thường, số, ký tự đặc biệt) mà không làm dịch chuyển con trỏ chuỗi.
