Bài 51: Bảng biểu thức Regular Expression trong Javascript

Chúng ta đã được học Regular Expression trong Javascript và cũng đã làm một số bài tập kết hợp với một số quy tắc căn bản mà mình đã liệt kê. Nhưng đó chỉ là nhũng quy tắc căn bản nhất và hoàn toàn không đầy đủ. Vì vậy trong bài này mình sẽ bổ sung các biểu thức Regular Expression nâng cao.

1. Bảng quy tắc Regular Expression

Chúng ta sẽ chia thành từng nhóm để sau này dễ tìm kiếm.

Modifiers

Modifier Description
i So sánh không phân biệt chữ hoa chữ thường (case-insensitive)
g So sánh toàn bộ chuỗi dù trong chuỗi có xuống hàng (global)
m So sánh nhiều dòng (multiline)

Brackets

Expression Description
[abc] Tìm các ký tự a, b hoặc c
[^abc] Tìm các ký tự không phải a, b và c
[0-9] Tìm các ký tự là chữ số từ 0-9
[^0-9] Tìm các ký tự không phải chữ số từ 0-9
(x|y) Tìm ký tự x hoặc y

Metacharacters

Expression Description
. Tìm ký tự bất kì
\w Tìm ký tự chữ cái
\W Tìm các ký tự không phải là chữ cái
\d Tìm ký tự là chữ số
\D Tìm ký tự không phải là chữ số
\s Tìm ký tự là khoảng trắng
\S Tìm ký tự không phải khoảng trắng
\b Tìm so khớp bắt đầu hoặc kết thúc chuỗi
\B Tìm so khớp không phải bắt đầu hoặc kết thúc chuỗi
\0 Tìm ký tự NULL
\n Tìm ký tự xuống hàng
\t Tìm ký tự tab

Quantifiers

Expression Description
+ Kiểm tra ký tự xuất hiện một hoặc nhiều lần
* Kiểm tra ký tự xuất hiện không hoặc nhiều lần
? Kiểm tra ký tự xuất hiện không hoặc một lần
{X} Kiểm tra ký tự xuất hiện đúng X lần
{X,Y} Kiểm tra ký tự xuất hiện tối thiểu X lần và tối đa Y lần
{X,} Kiểm tra ký tự xuất hiện ít nhất X lần
^ Kiểm tra ký tự bắt đầu chuỗi
$ Kiểm tra ký tự kết thúc chuỗi

2. Các ví dụ thực hành với biểu thức RegExp

Sau đây là các ví dụ thực hành để học Regular Expression trong Javascript.

Bài 1: Kiểm tra chuỗi xuất hiện ít nhất 10 chữ N liên tiếp và không phân biệt chữ hoa chữ thường

Ta sử dụng cú pháp {10,} để kiểm tra ít nhất 10 chữ N liên tiếp.

XEM DEMO

var pattern = /n{10,}/i;
if (pattern.test("10 chu n la nnnnnnnnnn")) {
    document.write('Chuỗi có NHIỀU hơn 10 chữ n');
}
else {
    document.write('Chuỗi có ÍT hơn 10 chữ n');
}

Bài 2: Kiểm tra chuỗi có phải là 'freetuts.net' hay không

Để kiểm tra chính xác chuỗi là 'freetuts.net' thì bắt buộc ta phải thêm ký tự bắt đầu ^ và kết thúc $ để fix chuỗi lại. Và có một lưu ý rằng ký tự . trong chuỗi 'freetuts.net' là ký tự đặc biệt vì nó có trong danh sách các biểu thức của RegExp nên bắt buộc ta phải thêm dấu \ đằng trước nó.

XEM DEMO

var pattern = /^freetuts\.net$/i;
if (pattern.test("freetuts.net")) {
    document.write('Chuỗi freetuts.net');
}
else {
    document.write('Không phải chuỗi freetuts.net');
}

Bài 3: Kiểm tra chuỗi là các chữ số và dài 8 ký tự

Để kiểm tra các chữ số ta dùng [0-9] và chiều dài 8 ký tự nên ta dùng {8}.

XEM DEMO

var pattern = /^[0-9]{8}$/;
if (pattern.test("12345678")) {
    document.write('Các số dài 8 ký tự');
}
else {
    document.write('Không phải là số hoặc ngắn hơn 8 ký tự');
}

Bài 4: Kiểm tra chuỗi định dạng mã thẻ cào xxxx-xxxx-xxxx-xxxx và x chính là các chữ số.

Ta sử dụng [0-9] để kiểm tra là chữ số. Và các cặp xxxx có chiều dì là 4 nên ta sử dụng {4}.

XEM DEMO

var pattern = /^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}$/;
if (pattern.test("1234-1232-1321-2312")) {
    document.write('Mã thẻ hợp lệ');
}
else {
    document.write('Mã thẻ không hợp lệ');
}

3. Lời kết

Với bảng danh sách các biểu thức RegExp này bạn có thể giải mọi bài toán rồi đấy. Tuy nhiên để giải được các bài phức tạp thì đòi hỏi bạn phải thực sự rành rỏi và biết các vận dụng đúng chỗ. Ngoài các biểu thức này ra còn có một số khái niệm như Condition, Lookahead, Lookbehind nhưng mình sẽ không trình bày ở serie này mà nó nằm ở serie Regular Expression tron PHP.

Bài tiếp theo chúng ta sẽ tìm hiểu một số hàm dùng để xử lý chuỗi RegExp trong Javascript.

Tài liệu chỉ mang tính chất tham khảo, mình không cam kết các nội dung trên website, vì vậy không được sử dụng để in ấn hay kinh doanh.
Hãy để lại link bài viết gốc khi chia sẻ bài viết này, mình sẽ report DMCA với những website vi phạm nội dung bản quyền mà mình đã đưa ra.

Nguồn: freetuts.net

Profile photo of adminTheHalfHeart

TheHalfHeart

Có sở thích viết tuts nên đã từng tham gia viết ở một số diễn đàn, đến năm 2014 mới có điều kiện sáng lập ra freetuts.net. Sinh năm 90 và có 1 vợ 2 con, thích ca hát và lập trình.

ĐĂNG BÌNH LUẬN: Đăng câu hỏi trên Facebook để được hỗ trợ nhanh nhất.