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
VDS là gì? VDS khác VPS và Dedicated Server như thế nào?
VDS là gì, khác VPS và Dedicated Server ở điểm nào, ưu nhược điểm và trường hợp nên sử dụng.
Cách triển khai observability cho ứng dụng đám mây và microservices như thế nào
Hướng dẫn triển khai observability cho ứng dụng đám mây và microservices qua 7 bước, từ xác định SLI/SLO đến tối ưu chi phí telemetry.
Top nhà cung cấp dịch vụ Dedicated Server giá tốt, tốc độ ổn định tại Việt Nam
Tổng hợp các nhà cung cấp Dedicated Server tại Việt Nam, so sánh mô hình dịch vụ, cấu hình, Data Center, uptime, băng thông và giá công bố.
Top nhà cung cấp dịch vụ Hosting và VPS uy tín tại Việt Nam
Top nhà cung cấp Hosting và VPS uy tín tại Việt Nam. So sánh hạ tầng, uptime, loại dịch vụ và các tiêu chí cần kiểm tra trước khi lựa chọn.
Thuê Cloud GPU có đắt không?
Thuê Cloud GPU có đắt không phụ thuộc vào yếu tố nào? Phân tích các mô hình tính phí, chi phí ẩn và cách tối ưu ngân sách khi dùng GPU đám mây.
Top nhà cung cấp dịch vụ Cloud GPU tại Việt Nam
Tổng hợp các nhà cung cấp Cloud GPU tại Việt Nam. So sánh GPU hỗ trợ, mô hình dịch vụ, hạ tầng và các tiêu chí doanh nghiệp cần cân nhắc.
Syslog là gì? Cách hoạt động, thành phần và cách triển khai
Syslog là gì? Tìm hiểu cách giao thức này giúp doanh nghiệp quản lý log tập trung, giám sát hệ thống và hỗ trợ phát hiện, xử lý sự cố kịp thời.
Observability là gì? Vai trò, thành phần và cách triển khai hiệu quả
Observability là gì? Tìm hiểu cách doanh nghiệp theo dõi hệ thống, phát hiện nguyên nhân sự cố và cải thiện hiệu suất ứng dụng hiệu quả.
VPS nào phù hợp cho mục đích lưu trữ web và app nhỏ? Cách lựa chọn cấu hình
Tìm hiểu xem VPS nào phù hợp cho mục đích lưu trữ web và app nhỏ? Cách lựa chọn cấu hình VPS sao cho phù hợp
SSD Hosting là gì? Ưu nhược điểm và cách lựa chọn phù hợp
SSD Hosting là gì? Tìm hiểu cách công nghệ lưu trữ SSD cải thiện khả năng truy xuất dữ liệu và những yếu tố cần cân nhắc khi lựa chọn hosting.
Bình luận ()