Xử lý mẫu chuỗi Regular Expression trong JavaScript

Regular Expression (Regex) là một biểu thức thường được dùng để mô tả một mẫu chuỗi  (string pattern) được sắp xếp theo một quy luật nhất định nào đó, ví dụ email,số điện thoại, ngày tháng,… Khi bạn tìm 1 đoạn text nào đó, bạn có thể sử dụng một mẫu chuỗi để mô tả cái cần tìm.
Như vậy Regex có các tác dụng:
  • Regex được sử dụng trong việc xử lý chuỗi : tìm kiếm, thay thế, bóc tách dữ liệu …
  • Regex được sử dụng nhiều trong việc kiểm tra tính hợp lệ đầu vào của dữ liệu, ví dụ : địa chỉ email có hợp lệ hay không? Định dạng ngày tháng có đúng không?

1. Cú pháp khai báo Regex trong Javascript

hoặc đơn giản là :
Trong đó :
  • pattern : mẫu chuỗi
  • modifiers : cách tìm. Có 3 cách tìm như sau :
    • i: thực hiện tìm không phân biệt ký tự hoa – thường
    • g : lặp lại quá trình tìm kiếm cho đến khi kết thúc chuỗi
    • m : hỗ trợ tìm kiếm nhiều dòng
Có thể kết hợp nhiều cách tìm với nhau, ví dụ : gi
Regex có thể có hoặc không có cách tìm.

2. Các phương thức có hỗ trợ regEx trong JavaScript

  • search(): Tìm kiếm chuỗi phù hợp với biểu thức và trả về vị trí của chuỗi đó
  • match(): Tìm kiếm chuỗi phù hợp với biểu thức và trả về mảng giá trị tìm thấy
  • replace(): Tìm kiếm chuỗi phù hợp với biểu thức và thay thế bằng một chuỗi khác
  • test(): Kiểm tra chuỗi có phù hợp với biểu thức hay không và trả về kết quả dạng logic (true/false)
  • exec(): Tìm kiếm một chuỗi với một giá trị chỉ định và trả về text của giá trị tìm được. Nếu không tìm được giá trị phù hợp, nó sẽ trả về null.
Ở đây chúng ta chỉ tìm hiểu về test() thôi nhé.
Ví dụ về test(): Kiểm tra trong chuỗi có ký tự “tin” hay không ?

3. Các ký tự dùng trong so mẫu /pattern/

  • \ loại bỏ các ký tự đặc biệt trong so mẫu
  • {n}: Chính xác n lần. Lặp một ký tự hoặc một biểu thức con trước đó x lần. Ví dụ: /d{5}/ tìm những số có 5 chữ số
  • {n,}: nhiều hơn n lần. Lặp một ký tự hoặc một biểu thức con trước đó >=n lần. Ví dụ: /d{5,}/ tìm những số có 5 chữ số trở lên
  • {n,m}: n đến m lần. Lặp một ký tự hoặc một biểu thức con trước đó từ n đến m lần. Ví dụ: /d{5,9}/ tìm những số có 5 đến 10 chữ số
  • [abc] : Tìm tất cả các ký tự nằm trong tập ký tự giữa cặp dấu ngoặc vuông
  • [^abc]: Tìm tất cả các ký tự không nằm trong tập ký tự giữa cặp dấu ngoặc vuông
  • [0-9]: Tìm tất cả các chữ số từ 0 đến 9
  • [A-Z]: Tìm tất cả các ký tự nằm trong khoảng từ A hoa đến Z hoa
  • [a-z]: Tìm tất cả các ký tự nằm trong khoảng từ a thường đến z thường
  • [A-z]: Tìm tất cả các ký tự nằm trong khoảng từ A hoa đến z thường
  • (red|blue|green): Tìm tất cả các ký tự là một trong các giá trị red, blue, green
  • + : Lặp một ký tự hoặc một biểu thức con trước đó >=1 lần. Dạng ghi ngắn của {1,}
  • * : Lặp một ký tự hoặc một biểu thức con trước đó >=0 lần.  Dạng ghi ngắn của {0,}
  • ? : Lặp một ký tự hoặc một biểu thức con trước đó 0 hoặc 1 lần. Dạng ghi ngắn của {0,1}
  •  (pattern)  tìm và bắt lấy /pattern/ . Tìm kiếm một nhóm các ký tự bên trong cặp dấu ngoặc và lưu vào chuỗi kết quả
  • (?:pattern)  tìm nhưng không bắt lấy . Tìm kiếm chuỗi kết quả không chứa tập ký tự nằm trong cặp dấu ngoặc
  • | : Phép toán hoặc, được sử dụng để kết hợp các mệnh đề với nhau vào chung một biểu thức.
  • \b : Trả về chuỗi kết quả trong trường hợp chuỗi này nằm ở đầu hoặc cuối của một từ trong chuỗi gốc. (Tùy thuộc vào vị trí đặt \b ở đầu hoặc cuối của chuỗi trong biểu thức Regex)
  • \B : Ngược lại với \b. Trả về chuỗi kết quả trong trường hợp chuỗi này không nằm ở vị trí đầu hoặc cuối của một từ trong chuỗi gốc. (Tùy thuộc vào vị trí đặt \B ở đầu hoặc cuối của chuỗi trong biểu thức Regex).
  • ?= : Trả về chuỗi kết quả nếu theo sau chuỗi đó là một chuỗi nào đó được chỉ định trước
  • ?! : Ngược lại với ?= . Trả về chuỗi kết quả nếu sau chuỗi đó không phải là một chuỗi nào đó được chỉ định trước
  • . : Tìm một ký tự đơn ( bao gồm cả khoảng trắng, dấu phẩy, …) , ngoại trừ ký tự xuống dòng hoặc kết thúc dòng
  • \w : Tìm một ký tự word (không bao gồm khoảng trắng, dấu phẩy, …)
  • \W: Ngược lại với \w. Tìm một ký tự không phải word
  • \d: Tìm một ký tự là chữ số
  • \D: Tìm một ký tự không phải là chữ số
  • \s: Tìm một ký tự là khoảng trắng
  • \S: Tìm một ký tự không là khoảng trắng
  • \?: Tìm một ký tự NULL
  • \n : Tìm một ký tự xuống dòng
  • \f : Find a form feed character
  • \r : Find a carriage return character
  • \t : Tìm một ký tự tab
  • \v : Find a vertical tab character
  • \xxx : Tìm một ký tự Latin được chỉ định bởi 1 số xxx dạng bát phân (octal)
  • \xdd : Tìm một ký tự được chỉ định bởi 1 số xdd dạng hexa
  • \uxxxx : Tìm một ký tự Unicode được chỉ định bởi 1 số xxxx dạng hexa
Nói như vậy chắc cũng khó hiểu. Sau đây mình sẽ lấy một ví dụ nhé
Một ví dụ về kiểm tra email hợp lệ. Email hợp lệ sẽ có dạng username@domain.com hoặc có thể là  username@domain.com.vn
 Giải thích.
Chúc các bạn thành công :)

0 Nhận xét