Regular expression là gì? Hướng dẫn toàn tập Regex trong JavaScript
05/06/2026Thay vì tốn kém thời gian viết các vòng lặp kiểm tra chuỗi cồng kềnh, lập trình viên có thể tối ưu hóa mã nguồn bằng các biểu thức chính quy. Viettel IDC sẽ giải đáp chính xác khái niệm regular expression là gì và hướng dẫn bạn cách thao tác bóc tách dữ liệu thực tế trong JavaScript.
Regular expression là gì?
Regular Expression (viết tắt là Regex hoặc RegExp) là một chuỗi các ký tự đặc biệt tạo thành một mẫu tìm kiếm (search pattern). Trong lập trình, Regex được sử dụng chủ yếu để đối chiếu (match), tìm kiếm (search), trích xuất (extract) hoặc thay thế (replace) các chuỗi ký tự cụ thể bên trong một đoạn văn bản lớn.
Ví dụ: Để kiểm tra một chuỗi có phải là địa chỉ email hợp lệ (thường có dạng ten@domain.com), bạn có thể dùng một mẫu RegEx tiêu chuẩn như sau:
- Khớp chuỗi đầu ^[a-zA-Z0-9._%+-]+: Tên email có thể chứa chữ, số và một số dấu.
- Ký tự bắt buộc @: Bắt buộc phải có @.
- Tên miền [a-zA-Z0-9.-]+: Tên miền (ví dụ: gmail, yahoo).
- Đuôi miền \.[a-zA-Z]{2,}$: Dấu chấm theo sau bởi ít nhất 2 chữ cái (ví dụ: .com, .vn) ở cuối chuỗi.
Cách khởi tạo Regular expression
Trong JavaScript, bạn có hai phương pháp cơ bản để khai báo một biểu thức chính quy (Regex). Việc chọn đúng phương pháp phụ thuộc vào việc mẫu của bạn là tĩnh (cố định) hay động (có thể thay đổi).
Sử dụng Regex Literal (Cú pháp tĩnh)
Đây là cách viết phổ biến nhất, trong đó mẫu tìm kiếm được đặt trực tiếp giữa hai dấu gạch chéo /.
- Cơ chế hoạt động: Trình duyệt sẽ tiến hành biên dịch (compile) biểu thức này ngay lập tức khi file script được tải.
- Khi nào nên dùng: Khuyên dùng cho các egular expression mang tính cố định, không thay đổi trong suốt quá trình chạy của ứng dụng (ví dụ: regex kiểm tra email, số điện thoại chuẩn).
- Ưu điểm: Tối ưu hiệu năng tốt hơn do engine JavaScript chỉ cần biên dịch mã một lần duy nhất.
Sử dụng RegExp Constructor (Hàm tạo đối tượng)
Phương pháp này sử dụng từ khóa new kết hợp với đối tượng RegExp, trong đó mẫu tìm kiếm được truyền vào dưới dạng chuỗi (string).
- Cơ chế hoạt động: Biểu thức sẽ được biên dịch tại thời điểm thực thi (runtime) thay vì lúc tải trang.
- Khi nào nên dùng: Bắt buộc sử dụng khi bạn cần tạo ra các mẫu Regex có thể thay đổi linh hoạt. Ví dụ điển hình nhất là khi bạn chưa biết trước mẫu cần tìm và phải nhận dữ liệu đầu vào (input) từ phía người dùng, hoặc ghép chuỗi từ các biến số khác nhau trong quá trình ứng dụng vận hành.
Cấu trúc cơ bản của một Regular Expression
Regular expression được cấu tạo từ các ký tự thông thường (như a, b, c, 1, 2, 3) và các ký tự siêu văn bản (metacharacters) mang ý nghĩa điều khiển. Để bắt đầu, bạn cần nắm vững 3 nhóm ký tự cốt lõi sau:
Ký tự thường và Ký tự đặc biệt (Metacharacters)
Một biểu thức Regex luôn được xây dựng từ hai nhóm thành phần cốt lõi để đảm bảo tính linh hoạt trong phân tích văn bản. Khi kết hợp chúng lại với nhau, lập trình viên có thể mô tả mọi quy tắc đối chiếu dù là phức tạp nhất.
- Ký tự thường (Literal characters): Đây là các chữ cái, chữ số mà bạn muốn tìm đích danh bên trong văn bản. Ví dụ, mẫu /abc/ chỉ tìm chính xác đoạn văn bản có chứa chuỗi "abc" được viết liền nhau.
- Ký tự đặc biệt (Metacharacters): Đây là các ký tự mang ý nghĩa lập trình, dùng để điều khiển hành vi tìm kiếm thay vì đối chiếu bề mặt bề mặt văn bản (ví dụ: *, +, ?, ^, $). Ví dụ, mẫu /ab*c/ sử dụng ký tự đặc biệt * để tìm chữ "a", theo sau bởi bất kỳ số lượng chữ "b" nào, và kết thúc bằng chữ "c".
Phân loại các nhóm ký tự đặc biệt theo chức năng
Để tạo ra các bộ lọc dữ liệu nâng cao, các ký tự đặc biệt trong RegExp được phân chia thành 4 nhóm chức năng riêng biệt. Dưới đây là bảng tổng hợp chi tiết cấu trúc của từng nhóm để bạn dễ dàng tra cứu trong quá trình viết code.
Các cờ điều khiển (Flags) thay đổi hành vi của mẫu
Cờ (Flags) là các tham số tùy chọn được đặt ở cuối mỗi regular expression để mở rộng khả năng tìm kiếm. Mặc dù không trực tiếp tham gia vào cấu trúc đối chiếu của mẫu, chúng lại có nhiệm vụ thay đổi toàn bộ cơ chế quét chuỗi của engine Regex.
Về mặt cú pháp, bạn có thể thêm cờ theo dạng literal (ví dụ: /pattern/flags) hoặc dạng constructor (ví dụ: new RegExp("pattern", "flags")). Dưới đây là bảng liệt kê các cờ cấu hình phổ biến nhất mà các lập trình viên thường xuyên sử dụng.
Các ví dụ thực tế về ứng dụng Regular Expression
Để hiểu rõ hơn sức mạnh của Regular Expression, chúng ta hãy cùng xem xét một số trường hợp sử dụng phổ biến trong quá trình phát triển phần mềm. Áp dụng linh hoạt các mẫu Regex này không chỉ tối ưu hóa hiệu suất xử lý mã nguồn mà còn tăng cường tính bảo mật và độ chính xác cho toàn bộ hệ thống.
Kiểm tra định dạng Email hợp lệ
Trong mọi ứng dụng web, xác thực định dạng địa chỉ email do người dùng nhập vào là bước vô cùng quan trọng. Thay vì viết hàng chục dòng lệnh điều kiện phức tạp kiểm tra từng ký tự, bạn hoàn toàn có thể xử lý triệt để bài toán này chỉ bằng một chuỗi biểu thức duy nhất.
Đoạn mã:
Trích xuất số điện thoại chuẩn Việt Nam
Khi thu thập dữ liệu (data scraping) hoặc làm sạch cơ sở dữ liệu khách hàng, thao tác lọc số điện thoại chuẩn xác là yêu cầu kỹ thuật thường xuyên xuất hiện. Số điện thoại di động tại Việt Nam hiện nay luôn bao gồm 10 chữ số, bắt đầu bằng số 0 hoặc mã quốc gia +84.
Hướng dẫn thao tác với Regular Expression trong JavaScript
Trong hệ sinh thái JavaScript, Regular Expression không hoạt động độc lập mà được tích hợp chặt chẽ vào các đối tượng hệ thống. Lập trình viên có thể thực thi các mẫu tìm kiếm thông qua các phương thức của đối tượng RegExp hoặc các hàm xử lý chuỗi gốc của đối tượng String.
Phân loại các phương thức xử lý chuỗi bằng Regex
Để dễ dàng lựa chọn công cụ phù hợp với bài toán thực tế, các hàm tương tác với Regex được chia thành 3 nhóm chức năng cốt lõi. Bảng dưới đây phân tích chi tiết mục đích và đặc điểm hiệu năng của từng nhóm hàm.
Lỗi phổ biến khi khởi tạo Regex
Khi cần bóc tách thông tin chi tiết bằng hàm exec(), lập trình viên mới thường mắc sai lầm khi gọi trực tiếp Regex dạng tĩnh bên trong vòng lặp (ví dụ: /pattern/.exec(string)). Hành động này buộc JavaScript phải liên tục biên dịch và khởi tạo một đối tượng Regex hoàn toàn mới ở mỗi chu kỳ lặp.
Hệ quả là thuộc tính lưu trữ vị trí lastIndex của biểu thức luôn bị reset về số 0, dẫn đến tình trạng vòng lặp vô hạn hoặc dữ liệu trả về bị sai lệch. Để khắc phục triệt để vấn đề này, bạn bắt buộc phải gán mẫu Regex vào một biến hằng số (const) trước khi tiến hành gọi hàm thực thi.
Khai thác sức mạnh của cờ Global (g) kết hợp hàm exec()
Khi bạn kết hợp phương thức exec() với cờ g, JavaScript sẽ kích hoạt một cơ chế lặp (iterative) cực kỳ thông minh. Sau mỗi lần tìm thấy một chuỗi hợp lệ, engine sẽ tự động lưu lại vị trí kết thúc của chuỗi đó vào thuộc tính lastIndex. Ở lần gọi hàm tiếp theo, quá trình quét văn bản sẽ bắt đầu chạy tiếp từ chính tọa độ vừa được lưu.
Phương pháp trích xuất tuần tự này ưu việt hơn hẳn so với việc gọi hàm match() thông thường. Mặc dù match() tiện lợi vì trả về toàn bộ mảng kết quả cùng lúc, nhưng nó lại loại bỏ hoàn toàn các thông tin siêu dữ liệu quan trọng như chỉ mục (index) vị trí của từng chuỗi con. Do đó, exec() luôn là lựa chọn hàng đầu của các chuyên gia khi cần phân tích cú pháp văn bản chuyên sâu.
Kết luận
Thông qua những phân tích cấu trúc và ví dụ thực tế trên, hy vọng bạn đã nắm vững bản chất regular expression là gì. Mặc dù cú pháp ban đầu trông có vẻ phức tạp, nhưng khi đã làm chủ được bộ công cụ này, bạn hoàn toàn có thể tự động hóa hàng loạt tác vụ phân tích văn bản một cách chuyên nghiệp nhất.
Để được hỗ trợ tư vấn và tìm hiểu các dịch vụ của Viettel, bạn có thể liên hệ trực tiếp tới Viettel IDC qua các kênh:
- Hotline: 1800 8088 (miễn phí cước gọi)
- Fanpage: https://www.facebook.com/viettelidc
Tin nổi bật
Tin liên quan
Trigger là gì trong DBMS? Cách hoạt động, các loại phổ biến và ứng dụng
Trigger là gì trong DBMS? Tìm hiểu cách trigger hoạt động, các loại phổ biến, ví dụ minh họa, ưu nhược điểm và khi nào nên sử dụng.
Figma là gì? Nền tảng thiết kế và cộng tác trực tuyến
Figma là gì, có những tính năng nổi bật nào? Tìm hiểu Vector Network, Auto Layout, Dev Mode và vị thế hiện tại của Figma trong ngành thiết kế.
Camera Cloud cần tốc độ mạng bao nhiêu? Cách tính băng thông cần thiết
Camera Cloud cần tốc độ mạng bao nhiêu? Tìm hiểu mức băng thông cần thiết, cách tính upload và các yếu tố ảnh hưởng đến tốc độ khi sử dụng Camera Cloud.
Camera Cloud có bị hack không? Nguyên nhân và cách bảo mật
Camera Cloud có bị hack không? Tìm hiểu các rủi ro bảo mật, nguyên nhân bị xâm nhập và cách bảo vệ camera, tài khoản cùng dữ liệu hiệu quả.
Viettel IDC: Nhà cung cấp VMware Sovereign Cloud duy nhất tại Đông Nam Á
Tại VMware Explore 2026 ở Las Vegas, Broadcom đã giới thiệu nhóm 57 nhà cung cấp dịch vụ đám mây chủ quyền trên nền tảng VMware Cloud Foundation. Viettel IDC là đơn vị duy nhất tại Đông Nam Á có tên trong danh sách này, đánh dấu bước tiến mới của doanh nghiệp Việt Nam trên thị trường hạ tầng cloud khu vực.
Ghidra là gì? Chức năng và ứng dụng trong reverse engineering
Ghidra là gì? Tìm hiểu công cụ reverse engineering mã nguồn mở của NSA, các chức năng chính, ứng dụng thực tế và điểm khác biệt với IDA Pro.
10 công cụ tối ưu hóa website theo từng mục tiêu
Tổng hợp 10 công cụ tối ưu hóa web cho tốc độ, SEO, trải nghiệm người dùng và chuyển đổi, kèm bảng so sánh và gợi ý lựa chọn theo nhu cầu.
So sánh WHOIS và DNS Lookup: Điểm khác nhau và khi nào nên sử dụng
WHOIS và DNS Lookup khác nhau thế nào? Tìm hiểu định nghĩa, bảng so sánh, vai trò của RDAP thay thế WHOIS, và khi nào nên dùng công cụ nào.
Cách test tải hệ thống: Quy trình và công cụ phổ biến
Cách test tải hệ thống hiệu quả gồm những bước nào? Tìm hiểu quy trình, chỉ số cần đo và công cụ phổ biến như JMeter, k6.
Cloud Monitoring là gì? So sánh Hybrid Cloud và Multi Cloud Monitoring
Cloud Monitoring là quá trình theo dõi, quản lý và đánh giá hiệu suất của các tài nguyên và dịch vụ đám mây, bao gồm giám sát máy chủ, cơ sở dữ liệu, ứng dụng và hệ thống mạng
Bình luận ()