Tuyển dụng
Viettel IDC

Regular expression là gì? Hướng dẫn toàn tập Regex trong JavaScript

05/06/2026

Thay 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:

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

- 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.

Regular expression là gì?

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 /.

JavaScript

const re = /ab+c/;

 

- 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).

JavaScript

const re = new RegExp("ab+c");

 

- 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ách khởi tạo Regular expression

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.

Nhóm chức năng

Cú pháp phổ biến

Ý nghĩa và Cách hoạt động

Lớp ký tự

(Character Classes)

[xyz], [^xyz], ., \d, \D, \w, \W, \s, \S

Nhóm này giúp phân biệt các loại ký tự khác nhau trong văn bản. Ví dụ, \d đại diện cho một chữ số bất kỳ. Các chữ viết hoa như \D, \W, \S mang ý nghĩa phủ định (nghĩa là KHÔNG PHẢI số, KHÔNG PHẢI chữ, KHÔNG PHẢI khoảng trắng).

Khẳng định & Logic

(Assertions & Logic)

^, $, \b, |, x(?=y), x(?!y)

Nhóm này xác định ranh giới từ/dòng hoặc thiết lập điều kiện logic. Đặc biệt, toán tử | đóng vai trò là phép HOẶC (OR). Các cú pháp như (?=y) (phải theo sau bởi y) hay (?!y) (không được theo sau bởi y) giúp kiểm tra điều kiện mà không tiêu thụ ký tự.

Định lượng

(Quantifiers)

*, +, ?, {n}, {n,}, {n,m}

Nhóm này chỉ định số lần xuất hiện lặp lại của ký tự hoặc biểu thức đứng ngay trước nó. Ví dụ, cú pháp {n,m} mang ý nghĩa ký tự đó bắt buộc phải xuất hiện tối thiểu từ n đến tối đa m lần.

Nhóm & Tham chiếu

(Groups & Backrefs)

(x), (?<Name>x), (?:x), \n, \

Nhóm này gom nhiều mẫu nhỏ thành một khối thống nhất để xử lý. Dấu \ được dùng để "thoát" (escape) các ký tự đặc biệt, biến chúng thành ký tự văn bản thông thường. Dấu () dùng để ghi nhớ (capture) chuỗi con phục vụ việc bóc tách dữ liệu về sau.

 

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ờ (Flag)

Tên thuộc tính

Mô tả chi tiết

g

global

Cờ này yêu cầu engine tìm tất cả các kết quả khớp có trong văn bản. Nếu không sử dụng nó, quá trình tìm kiếm sẽ dừng lại ngay ở kết quả đầu tiên được tìm thấy.

i

ignoreCase

Cờ này chỉ định engine bỏ qua sự khác biệt giữa chữ hoa và chữ thường khi đối chiếu văn bản. Ví dụ, mẫu /abc/i sẽ khớp với cả "ABC", "Abc" lẫn "abc".

m

multiline

Cờ này kích hoạt chế độ quét nhiều dòng cho dữ liệu đầu vào. Khi đó, ký tự ^ và $ sẽ khớp với điểm bắt đầu và kết thúc của từng dòng đơn lẻ, thay vì đối chiếu trên toàn bộ văn bản lớn.

s

dotAll

Cờ này kích hoạt chế độ dòng đơn cho việc xử lý chuỗi. Nó cho phép ký tự đại diện dấu chấm . khớp với tất cả mọi ký tự, bao gồm cả ký tự xuống dòng (\n).

u

unicode

Cờ này kích hoạt các tính năng xử lý nâng cao dành riêng cho các chuỗi văn bản chứa ký tự Unicode. Nhờ đó, Regex có thể xử lý chính xác các ký tự đặc biệt như emoji hay hệ thống chữ có dấu phức tạp.

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ã:

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

 

Thành phần cấu trúc

Giải thích chi tiết cơ chế hoạt động

^[a-zA-Z0-9._%+-]+

Khớp với phần tên đăng nhập của email nằm ngay trước ký tự @. Cú pháp này cho phép người dùng sử dụng chữ cái, chữ số và một số ký tự đặc biệt thông dụng.

@

Bắt buộc phải có ký tự @ đóng vai trò vách ngăn. Đây là dấu hiệu nhận biết cơ bản và bắt buộc nhất của một địa chỉ email chuẩn.

[a-zA-Z0-9.-]+

Khớp với tên miền của dịch vụ cung cấp email (ví dụ: gmail, yahoo). Phần này bắt buộc chứa ít nhất một ký tự hợp lệ theo chuẩn định danh tên miền.

\.[a-zA-Z]{2,}$

Đại diện cho phần mở rộng của tên miền (như .com, .vn). Cấu trúc yêu cầu bắt đầu bằng dấu chấm và có từ 2 chữ cái trở lên trước khi kết thúc chuỗi.

 

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.

^(0|\+84)[3|5|7|8|9][0-9]{8}$

 

Thành phần cấu trúc

Giải thích chi tiết cơ chế hoạt động

^(0|\+84)

Bắt buộc văn bản khởi đầu bằng số 0 hoặc mã quốc gia +84. Cú pháp | đóng vai trò toán tử OR nhằm linh hoạt tiếp nhận các định dạng đầu vào khác nhau.

[3|5|7|8|9]

Khớp với vị trí ký tự thứ hai của số điện thoại. Theo quy hoạch kho số hiện hành, đây là các đầu số hợp lệ duy nhất từ các nhà mạng tại Việt Nam.

[0-9]{8}$

Yêu cầu xuất hiện chính xác 8 chữ số nối tiếp ngay sau cụm đầu số và kết thúc chuỗi. Điều kiện này đảm bảo tổng chiều dài số điện thoại luôn khớp với quy chuẩn 10 số.

 

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.

 

Nhóm chức năng

Phương thức tích hợp

Ứng dụng thực tế và Đánh giá hiệu năng

Kiểm tra tính hợp lệ (Validation)

test(), search()

Nhóm này chuyên dùng để trả lời câu hỏi "Chuỗi này có chứa mẫu cần tìm hay không?". Tốc độ thực thi của chúng cực kỳ nhanh vì engine JavaScript không phải tốn bộ nhớ để khởi tạo mảng lưu trữ kết quả.

Bóc tách dữ liệu (Extraction)

exec(), match(), matchAll()

Lập trình viên sử dụng nhóm hàm này khi cần trích xuất chính xác các đoạn văn bản khớp với điều kiện. Quá trình này xử lý chậm hơn nhóm kiểm tra do hệ thống phải thu thập dữ liệu và đóng gói thành đối tượng mảng chi tiết.

Biến đổi văn bản (Mutation)

replace(), replaceAll(), split()

Nhóm hàm này can thiệp trực tiếp vào việc thay đổi cấu trúc của văn bản gốc. Chúng hỗ trợ tìm kiếm và thay thế chuỗi con, hoặc sử dụng Regex làm điểm neo để cắt một đoạn text dài thành nhiều phần tử nhỏ.

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  

Bình luận ()

Đăng nhập | Đăng ký
để gửi bình luận
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Xem thêm bình luận

Tin liên quan

28/09/2026

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.

28/09/2026

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ế.

28/09/2026

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.

28/09/2026

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ả.

28/09/2026

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.

25/09/2026

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.

25/09/2026

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.

25/09/2026

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.

25/09/2026

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.

16/01/2025

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