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 liên quan
Lỗi msvcr100.dll là gì? Hướng dẫn cách sửa lỗi msvcr100 dll nhanh chóng
Lỗi msvcr100.dll khiến phần mềm không khởi chạy trên Windows. Xem hướng dẫn khắc phục từng bước để bổ sung thư viện còn thiếu và sửa chữa chương trình bị lỗi.
Top 20 các extension visual studio code hữu ích cho lập trình viên
Các extension Visual Studio Code hữu ích mở rộng khả năng của trình soạn thảo, giúp lập trình viên tối ưu môi trường làm việc và nâng cao hiệu quả viết mã.
Bridge là gì? Cách hoạt động và ứng dụng trong mạng LAN
Bridge là gì? Cầu nối mạng hoạt động dựa trên địa chỉ MAC để kết nối các phân đoạn LAN, kiểm soát luồng dữ liệu và hỗ trợ triển khai mạng vật lý lẫn mạng ảo.
Lỗi Blocked due to other 4xx issue là gì? Nguyên nhân và cách fix lỗi
Lỗi Blocked due to other 4xx issue khiến Google không lập chỉ mục URL, cần xác định đúng mã HTTP và nguyên nhân để khắc phục hiệu quả trong Search Console.
Test case là gì? Cách viết test case và mẫu minh họa cho người mới
Test case là gì và làm sao để viết rõ ràng, đúng yêu cầu? Nắm vững cách xây dựng trường hợp kiểm thử qua ví dụ cụ thể để phát hiện sai lệch trong hoạt động phần mềm.
AI Inference là gì? Cơ chế và vai trò trong vận hành AI
AI inference là gì? Cách mô hình AI tạo kết quả sau huấn luyện, phân biệt với AI training, các hình thức triển khai và ứng dụng thực tế trong doanh nghiệp.
DBeaver là gì? Hướng dẫn cài đặt và kết nối cơ sở dữ liệu với DBeaver
DBeaver là gì? Khám phá tính năng quản lý cơ sở dữ liệu, các phiên bản miễn phí và trả phí cùng hướng dẫn cài đặt, kết nối, chạy truy vấn SQL cho người mới.
Cách thay đổi mật khẩu máy tính trên Windows 10, 11 đơn giản
Cách thay đổi mật khẩu máy tính trên Windows 10, 11 qua Settings, Control Panel, CMD và các công cụ quản trị được hướng dẫn chi tiết theo từng bước dễ thực hiện.
Microsoft Management Console là gì? Cách sử dụng MMC cho người mới
Microsoft Management Console là gì? Đây là nền tảng tập hợp các công cụ quản trị Windows, hỗ trợ quản lý hệ thống, thêm snap-in và lưu console theo nhu cầu sử dụng.
Rủi ro khi sử dụng giả lập online và cách phòng tránh
Rủi ro khi sử dụng giả lập online có thể gây lộ dữ liệu, mất quyền kiểm soát tài khoản, lừa đảo trực tuyến, vi phạm chính sách game, gián đoạn thao tác và phát sinh chi phí.
Bình luận ()