03/08/2018, 10:01

RegExp - Regular Expression trong Javascript

Bài này chúng ta sẽ tìm hiểu đến chuỗi và cách sử dụng biểu thức chính quy ( Regular Expression ) để xử lý chuỗi nâng cao. Như ta biết Regular ...

Bài này chúng ta sẽ tìm hiểu đến chuỗi và cách sử dụng biểu thức chính quy (Regular Expression) để xử lý chuỗi nâng cao. Như ta biết Regular Expression hoạt động theo quy tắc so khớp va lấy kết quả của sự so khớp đó thông qua những quy tắc mà nó đưa ra. Dựa vào những quy tắc này lập trình viên sẽ viết thành những biểu thức và áp dụng vào bài toán của mình.

Regular Expression được ghi tắt là RegExp nên để ngắn gọn thì trong bài này mình sẽ nói là RegExp nhé các bạn.

1. Regular Expression trong Javascript

Để hiểu rõ hơn về Regular Expression thì bạn nên học qua serie tìm hiểu Regular Expression trong PHP vì trong serie đó mình viết khá chi tiết và đầy đủ. Và để không mất thời gian viết lại những gì đã viết thì phần này mình chỉ nói sơ sơ qua thôi nhé.

Note: Trong Javascript thì Regular Expression là một chuỗi nhưng nó không được bao quanh bởi cặp dấu nháy đơn ' hoặc nháy kép " mà nó được bao quanh bởi cặp dấu /.

Cú pháp:

/pattern/modifiers

Trong đó:

  • pattern là chuỗi Regular Expression
  • modifiers là thông số cấu hình cho chuỗi pattern và nó có các giá trị:
    • i : so khớp không quan tâm đến chữ hoa chữ thường
    • g : so khợp toàn bộ chuỗi cần tìm
    • m : so khớp luôn cả các dữ liệu xuống dòng (multiline)

Ví dụ: Pattern kiểm tra chuỗi có tồn tại chữ "freetuts" không, không phân biệt chữ hoa chữ thường và tìm toàn bộ tài liệu.

var pattern = /freetuts/igm;

Trong ví dụ này thì:

  • pattern là freetuts
  • modifiers là igm

2. Các quy tắc Regular Expression căn bản

Sau đây là một số quy tắc căn bản thường hay sử dụng trong Regular Expression.

Expression Description
[abc] Tìm các chữ cái a,b hoặc c
[0-9] hoăc [a-z]  Tìm các ký tự từ 0-9 hoặc từ a-z
(x|y) ìm ký tự x hoặc y
d Tìm các chữ số
s Tìm khoảng trắng
n+ Tìm 1 hoặc nhiều chữ n liên tiếp nhau
n* Tìm 0 hoặc nhiều chữ n liên tiếp nhau
n? Tìm 0 hoặc 1 chữ n

Bây giờ mình sẽ thực hành một vài ví dụ nhé. Nhưng trước khi đi vào ví dụ thì mình xin giới thiệu một hàm trong parttern dùng để kiểm tra một chuỗi đó là hàm test().

Cú pháp: pattern.test(string)

Trong đó:

  • pattern là chuỗi pattern
  • string là chuỗi cần kiểm tra.

Kết quả trả về: TRUE nếu khớp và FALSE nếu không khớp.

Ví dụ: Kiểm tra trong chuỗi có xuất hiện chữ freetuts hay không?

Ví dụ này ta chỉ cần truyền nguyên chuỗi freetuts vào pattern là xử lý được.

XEM DEMO

var patt = /freetuts/;
if (patt.test("Chào mừng bạn đến với code24h.com")) {
    document.write('Trong chuỗi có chữ freetuts');
}
else {
    document.write('Trong chuỗi không có chữ freetuts');
}

Với ví dụ này bạn có thể sử dụng trực tiếp hàm test() trong pattern cũng được.

/freetuts/.test("Chào mừng bạn đến với code24h.com")
Ví dụ: Kiểm tra chuỗi có ít nhất một chữ n

Ví dụ này hơi đặc biệt nên ta sử dụng dấu + trong bảng RegEx căn bản trên, nó có tác dụng kiểm tra một chuỗi có ít nhất 1 ký tự cần tìm kiếm.

XEM DEMO

if (/n+/.test("hello")) {
    document.write('Trong chuỗi có chữ n');
}
else {
    document.write('Trong chuỗi không có chữ n');
}
Ví dụ: Kiểm tra trong chuỗi có xuất hiện số hay không?

Với ví dụ này ta có hai cách giải, cách thứ nhất sử dụng cặp dấu ngoặc [0-9] và cách thứ hai là dùng ký hiệu d.

Trong ví dụ này mình giải bằng cặp dấu ngoặc [0-9].

XEM DEMO

if (/[0-9]/.test("hello123")) {
    document.write('Trong chuỗi có xuất hiện số');
}
else {
    document.write('Trong chuỗi không xuất hiện số');
}
Ví dụ: Kiểm tra trong chuỗi không hoặc có xuất hiện số

Bài này ta sẽ kết hợp cặp dấu ngoặc [0-9] và ký hiệu * trong bảng trên. Rõ ràng trường hợp này thì chuỗi RegEx luôn đúng bởi vì ta có 2 trường hợp XUẤT HIỆN hoặc KHÔNG XUẤT HIỆN.

XEM DEMO

if (/[0-9]*/.test("freetuts")) {
    document.write('Luôn luôn chạy');
}
else {
    document.write('Không bao giờ chạy');
}
Ví dụ: Kiểm tra trong chuỗi có chữ H hay không?

Bài này khá đơn giản là ta chỉ cần truyền chữ H vào như sau:

XEM DEMO

if (/H/.test("hello")) {
    document.write('Có chữ H');
}
else {
    document.write('Không có chữ H');
}

Rõ ràng trong ví dụ có xuất hiện chữ h mà tại sao nó báo không xuất hiện? Lý do là trong chuỗi pattern chúng ta kiểm tra chữ in HOA nhưng trong chuỗi cần kiểm tra thì lại có chữ in thường nên nó báo sai. Để giải quyết thì ta thêm chữ i đằng sau chuỗi pattern.

XEM DEMO

if (/H/i.test("hello")) {
    document.write('Có chữ H');
}
else {
    document.write('Không có chữ H');
}

Các bạn xem phần modifiers ở trên để biết thêm thông tin.

3. Lời kết

Trong bài mình cũng chỉ đưa ra các ví dụ không có tính ứng dụng trong thực tế nhưng bài này giúp bạn làm quen với biểu thức chính quy RegEx trong Javascript. Nó thuộc dạng kiến thức nâng cao nên rất khó, vì vậy bạn hãy thực hành kỹ để bài tiếp theo dễ hiểu bài hơn. .

Còn khá nhiều bài tập nhưng bạn cần phải biết nhiều hơn nữa các biểu thức Regular Expression và vấn đề này mình sẽ trình bày ở bài tiếp theo.

BÀI KẾ SAU
BÀI KẾ TIẾP

Nguồn: code24h.com

Bài liên quan

Bảng biểu thức quy tắc Regular Expression trong Javascript

Javascript Object Prototypes Đối tượng Regular Expression trong Javascript Bảng biểu thức Regular Expression trong Javascript được mình trình bày với những bài tập hết hợp một số quy tắc cơ bản nhất giúp bạn đọc bổ sung kiến thức về Regular Expression. Đây là bài học cuối cùng trong ...

Trần Trung Dũng viết 17:10 ngày 04/09/2018

Đối tượng Regular Expression trong Javascript

Các thao tác với đối tượng (Object) trong Javascript Javascript Object Prototypes Bảng biểu thức quy tắc Regular Expression trong Javascript Regular Expression là chữ viết tắt của RegExp. Chúng ta sẽ tìm hiểu đến chuỗi và cách sử dụng biểu thức chính quy (Regular Expression) để xử lý ...

Vũ Văn Thanh viết 17:09 ngày 04/09/2018

Regular Expression trong Java

Thự hiện các bài thực hành liên quan tới Regular Expression trong Java để hiểu sâu hơn những khái niệm về Regular Expression. Dưới đây là các ví dụ được sử dụng phổ biến nhất trong khi làm việc với Regular Expression trong Java.

Tạ Quốc Bảo viết 10:52 ngày 14/08/2018

Regular Expression trong Javascript

Regular Expression (hay còn gọi là Biểu thức chính quy) là một cách để mô tả các pattern (mẫu) trong dữ liệu kiểu chuỗi. Chúng tạo thành một ngôn ngữ nhỏ, riêng biệt là một phần của JavaScript cũng như nhiều ngôn ngữ và công cụ khác. Biểu thức chính quy tuy không đẹp mắt nhưng lại vô cùng hữu ích. ...

Hoàng Hải Đăng viết 16:15 ngày 12/08/2018

Làm quen với Regex (REGULAR EXPRESSION) trong Ruby

Khi làm dự án mình thấy Regex được dùng rất nhiều trong kiểm tra validate của dữ liệu, ví dụ Khách hàng muốn ta nhập trường A chỉ chứa các gmail cách nhau bởi dấu phẩy. Vậy làm thế nào để có thể biết được dữ liệu người dùng nhập vào là hợp lệ??? Bài viết mình giới thiệu cơ bản về Regex để bạn làm ...

Bùi Văn Nam viết 14:50 ngày 12/08/2018
0