Tìm hiểu RegExp (Regular Expression) trong Javascript

Admin

Administrator
Thành viên BQT
#1
Tìm hiểu 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 Expression hoạt động theo quy tắc so khớp và 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 tìm hiểu qua Regular Expression trong PHP. Và để không mất thời gian 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:
Mã:
/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ữ "vnxf" không, không phân biệt chữ hoa chữ thường và tìm toàn bộ tài liệu.
Mã:
var pattern = /vnxf/igm;
Trong ví dụ này thì:
  • pattern là vnxf
  • 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.

quy-tac.png

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ữ vnxf hay không?

Ví dụ này ta chỉ cần truyền nguyên chuỗi vnxf vào pattern là xử lý được.
Mã:
var patt = /vnxf/;
if (patt.test("Chào mừng bạn đến với vnxf.vn")) {
    document.write('Trong chuỗi có chữ vnxf');
}
else {
    document.write('Trong chuỗi không có chữ vnxf');
}
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.
Mã:
/vnxf/.test("Chào mừng bạn đến với vnxf.vn")
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.
Mã:
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].
Mã:
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.
Mã:
if (/[0-9]*/.test("vnxf")) {
    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:
Mã:
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.
Mã:
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.

Chúc các bạn thành công.


Nguồn: freetuts.net​
 

Từ khóa phổ biến

You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an alternative browser.

Top