Biểu thức quy tắc trong javaScript (regular expression)

Biểu thức quy tắc trong javaScript (regular expression)

Cũng như những ngôn ngữ lập trình khác biểu thức quy tắc (regular expression) là một tính năng đắc lực để kiểm tra, so sánh, thay thế, tách, ghép một chuỗi nào đó theo một quy tắc bạn quy định, nếu bạn đã tìm hiểu về biểu thức quy tắc trong ngôn ngữ PHP rồi thì sẽ thấy javaScript cũng có cách quy định tương tự chỉ khác ở một số hàm xử lý biểu thức quy tắc.

Trong javaScript ta có 2 cách để khai báo biểu thức quy tắc:

  1. Khai báo với 2 dấu "/" ở đầu và cuối biểu thức
  2. Khai báo thông qua việc tạo đối tượng RegExp

Cách thứ nhất thường dùng nhiều hơn bởi sự đơn giản trong khai báo.

Khi xử lý một chuỗi với biểu thức điều kiện một điều quan trọng là bạn muốn khi áp dụng ký tự có phân biệt chữ in hoa in thường hay không và áp dụng cho đoạn chuỗi đầu tiên tìm được hay tất cả các đoạn chuỗi hợp quy tắc, ta sẽ được tìm hiểu điều này sau đây:

  •  "/quy tắc/" biểu thức có phân biệt chữ in hoa, in thường, và chỉ áp dụng cho đoạn chuỗi đầu tiên tìm thấy đúng quy tắc
  • "/quy tắc/g" biểu thức có phân biệt hoa - thường và áp dụng cho tất cả đoạn chuỗi hợp quy tắc
  • "/quy tắc/i" biểu thức không phân biệt hoa - thường, và chỉ áp dụng cho đoạn chuỗi đầu tiên tìm thấy đúng quy tắc
  •  "/quy tắc/gi" biểu thức không phân biệt hoa - thường, và áp dụng cho tất cả đoạn chuỗi hợp quy tắc

Ví dụ: thay ký tự n bằng dấu "*"

var str = 'Xin chào!, tôi là VANKHUONG 777';
var str1 = str.replace(/n/gi, '*');
document.write(str1);
// Xi* chào!, tôi là VA*KHUO*G 777
var str2 = str.replace(/n/,'*');
document.write(str2);
// Xi* chào!, tôi là VANKHUONG 777

Tiếp theo ta sẽ tìm hiểu cách viết biểu thức quy tắc với cách dùng ký tự đại diện được quy ước trong biểu thức.

Quy tắc về vị trí

  • "^" nghĩa là bắt đầu một chuỗi
  • "$" nghĩa là kết thúc một chuỗi
  • "\b" nghĩa là điểm giữa một ký tự là từ và ký tự không phải là từ, ký tự là từ ở đây là ký tự từ A-z, 0-9
  • "\B" ngược lại với '/b'

Ví du:

var str = 'ngo van khuong';
var str3 = str.replace(/n\b/, '*');
// str3: ngo va* khuong
var str4 = str.replace(/n\B/, '*');
// str4: *go van khuo*g

Quy tắc về những ký tự metasymbol

  • "\d" đại diện cho một ký tự số từ 0-9, tương đương với cách viết [0-9]
  • "\D" đại diện cho một ký tự không phải là kiểu số từ 0-9, ngược lại với "\d"
  • "\s" đại diện cho một ký tự là khoảng trắng
  • "\S" đại diện cho một ký tự không phải là khoảng trắng, ngược lại với "\s"
  • "\w" đại diện cho một ký tự từ A-Z hoặc a-z hoặc 0-9, hoặc ký tự gạch dưới "_"
  • "\W" đại diện cho một ký tự không phải là từ A-Z, a-z, 0-9, ký tự gạch dưới "_"

Ví dụ:

var str = 'Xin chào!, tôi là VANKHUONG 777';
var str5 = str.replace(/\w/g, '*');
// str5: *** **à*!, *ô* *à ********* ***

Quy tắc về số lượng ký tự

  • "x?" nghĩa là một ký tự "x" hoặc không có ký tự nào
  • "x*" nghĩa là một hoặc nhiều ký tự "x" hoặc không có ký tự nào
  • "x+" nghĩa là có ít nhất một ký tự x
  • "x{n}" nghĩa là ký tự x lặp lại n lần
  • "x{n,}" nghĩa là ký tự x lặp lại ít nhất n lần
  • "x{n,m}" nghĩa là ký tự x lặp lại từ n tới m lần
var str = 'good night, godgad, gd, gooogle';
var str6 = str.replace(/go?d/gi, '*');
// str6: good night, *gad, *, gooogle
var str7 = str.replace(/g(oo)?d/gi, '*');
// str7: * night, godgad, *, gooogle
var str8 = str.replace(/go*d/gi, '*');
// str8: * night, *gad, *, gooogle
var str9 = str.replace(/go+/gi, '*');
// str9: *d night, *dgad, gd, *gle
var str10 = str.replace(/o{2}/gi, '*');
// str10: g*d night, godgad, gd, gooogle
var str11 = str.replace(/o{2,}/gi, '*');
// str11: g*d night, godgad, gd, g*gle
var str12 = str.replace(/go{1,3}d/gi, '*');
// str12: *d night, *dgad, gd, gooogle

Quy tắc về danh sách ký tự

  • "[...]" trong dấu ngoặc vuông liệt kê danh sách những ký tự hợp quy tắc, có thể dùng dấu gạch giữa "-"giữa 2 ký tự để thể hiện danh sách những ký tự trong khoảng 2 ký tự theo vị trí ASCII của ký tự
  • "[^...]" chức năng thì ngược lại với "[...]" thay vì liệt kê những ký tự hợp quy tắc, nó cho biết bất kỳ ký tự nào ngoài danh sách các ký tự trong dấu ngoặc vuông

Ví dụ:

var str ='ABCDEF, abcdef, 12345';
var str13 = str.replace(/[Ab1]/g, '*');
// str13: *BCDEF, a*cdef, *2345
var str14 = str.replace(/[A-Cd-f1-35]/g, '*');
// str14: ***DEF, abc***, ***4*
var str15 = str.replace(/[^A-f4-5]/g, '*');
// str15: ABCDEF**abcdef*****45

Với biểu thức quy tắc bạn có thể có nhiều cách viết khác nhau cùng theo một quy tắc hay cùng cho bạn kết quả giống nhau, có người viết dài người viết ngắn nhưng miễn sao bạn thấy giễ hiểu là được, nếu bạn viết quen thì biểu thức nhìn sẽ ngắn hơn. Nếu bạn không hiểu rõ các quy ước trong biểu thức quy tắc thì bạn cũng chẳng hiểu người khác viết gì vì đa số những người có kinh nghiệm đều viết biểu thức ngắn và chặt chẽ, hy vọng bạn thấy bài viết này bổ ích và có thể vận dụng nó một cách hiệu quả.

Tags: 
Bạn thấy bài viết này như thế nào?: 
Average: 9 (1 vote)
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Bình luận (0)

 

Add Comment

Filtered HTML

  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Các thẻ HTML được chấp nhận: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Tự động ngắt dòng và đoạn văn.

Plain text

  • No HTML tags allowed.
  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Tự động ngắt dòng và đoạn văn.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
 eCommerce Store với Drupal

Các vấn đề cơ bản để xây dựng eCommerce Store với Drupal

In this article you will learn which steps to take to get your country specific e-Commerce store up and running in Drupal - in just 30 to 60 minutes of your time (even faster if you've done this before).

CNN đã phỏng vấn một thành viên của Anonymous

CNN đã phỏng vấn một thành viên của Anonymous

Tại sao Anonymous hack CNN của Mỹ đã có buổi phỏng vấn với một thành viên của Anonymous, giấu tên, giấu mặt. 

7 bước xây dựng  Responsive Theme trong Drupal 7

7 bước xây dựng Responsive Theme trong Drupal 7

Based on the grid system and the nature of your design, download grids from http://960.org. In the case of the RoboSmart theme we have used a single grid at 600 which is fluid and works for any screen resolution greater than 600px.

Công ty diệt chuột T&C

 

Diet con trung