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

19/10/2026

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.

19/10/2026

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.

19/10/2026

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

19/10/2026

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.

19/10/2026

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.

19/10/2026

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.

19/10/2026

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.

19/10/2026

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

19/10/2026

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

19/10/2026

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.