JavaScript - Regular Expression

by My Love

09/04/2019, 10:00 AM   |    09/04/2019, 10:00 AM   |    698   |    0

      Regular Expression viết tắt là RegExp hay còn gọi là biểu thức chính quy là một chuỗi các kí tự mẫu được kết hợp với nhau, lập trình viên sẽ kết hợp các kí tự này thành những biểu thức sử dụng cho việc so khớp, tìm kiếm chuỗi. Bài này ta cùng tìm hiểu về Regular Expression nhé.
1. Khởi tạo Regular Expression
      Để khởi tạo Regular Expression ta có hai cách sau :
var re = /abc/;
// hoặc
var re = new RegExp("abc");
Ngoài ra ta có thể kết hợp với flags để cấu hình chuỗi như sau :
var re = /abc/flags;
// hoặc
var re = new RegExp("abc", "flags");
Trong đó flags nhận các giá trị ở bảng sau :
flags Mô tả
i So sánh không phân biệt chữ hoa chữ thường
m So sánh nhiều dòng. Gồm cả các kí tự xuống dòng
g So sánh toàn bộ chuỗi

2. Những Phương thức thường sử dụng trong Regular Expression
Phương thức Mô tả
test Một phương thức của RegExp dùng để kiểm tra mẫu có khớp với chuỗi hay không. Nó trả về giá trị true hoặc false.
exec Một phương thức của RegExp dùng để tìm kiếm chuỗi phù hợp với mẫu so khớp. Nó trả về một mảng chứa kết quả tìm kiếm.
match Một phương thức của chuỗi dùng để tìm kiếm chuỗi phù hợp với mẫu so khớp. Nó trả về một mảng chứa kết quả tìm kiếm hoặc null nếu không tìm thấy.
search Một phương thức của chuỗi dùng để tìm kiếm chuỗi phù hợp với mẫu so khớp và trả về vị trí của chuỗi đó hoặc -1 nếu không tìm thấy.
replace Một phương thức của chuỗi dùng để tìm kiếm một chuỗi theo mẫu so khớp và thay thế chuỗi con được khớp với một chuỗi thay thế.
split Một phương thức của chuỗi dùng một biểu mẫu chính quy hoặc một chuỗi bất biến để ngắt chuỗi đó thành một mảng các chuỗi con.

Ví dụ : Tìm kiếm từ khóa Messi trong chuỗi, không phân biệt chữ hoa chữ thường
var Rep = /messi/i;
if (Rep.test("Messi là cầu thủ xuất sắc nhất thế giới.")) {
     document.write('Có từ khóa Messi');
}
else {
     document.write('Không có từ khóa Messi');
}
// Kết quả
Có từ khóa Messi
3. Bảng quy tắc Regular Expression
Kí hiệu Mô tả
* Cho phép kí tự trước nó lặp lại 0 lần hoặc nhiều lần. Tương đương với cách viết {0,}
+ Cho phép kí tự trước nó lặp lại 1 lần hoặc nhiều lần. Tương đương với cách viết {1,}.
? Cho phép kí tự trước nó lặp lại 0 lần hoặc 1 lần duy nhất. Tương đương với cách viết {0,1}.
\ Dấu gạch chéo \ sẽ biến kí tự liền sau nó thành kí tự đặc biệt.
Nếu dấu gạch chéo \ đứng trước kí tự đặc biệt nó sẽ biến kí tự đặc biệt đó thành kí tự thường, tức là có thể tìm kiếm kí tự đặc biệt này trong chuỗi như các kí tự thường khác.
Dấu \ cũng là kí tự đặc biệt, nếu muốn tìm kiếm \ trong chuỗi ta dùng \\
$ Kiểm tra kí tự ở cuối chuỗi.
Ví dụ, /s$/ không khớp với 's' trong chuỗi "Messi" nhưng lại khớp trong chuỗi "is".
^ Kiểm tra kí tự bắt đầu chuỗi.
{x} Kiểm tra ký tự xuất hiện đúng x lần. x phải là một số nguyên dương.
{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

Bảng kí tự đặc biệt :
Kí hiệu Mô tả
. Dấu . khớp với bất kì kí tự đơn nào ngoại trừ kí tự xuống dòng.
\d Tìm ký tự là chữ số . Tương đương với mẫu [0-9]
\D Tìm ký tự không phải là chữ số . Tương đương với mẫu [^0-9]
\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
\w Tìm tất cả kí tự là chữ, số và gạch dưới. Tương đương với mẫu [A-Za-z0-9_]
\W Tìm tất cả kí tự không phải là chữ. Tương đương với mẫu [^A-Za-z0-9_]
\0 Tìm các kí tự NULL. Lưu ý: không được thêm bất kì một kí tự số nào sau 0, vì \0<các kí tự số> là biểu diễn hệ bát phân
\n Tìm kí tự xuống dòng
\t Tìm kí tự tab
Lớp kí tự : Trong lớp kí tự, dấu chấm (.) và dấu hoa thị (*) không còn là kí tự đặc biệt
Kí hiệu Mô tả
[xyz] Tìm các ký tự x,y hoặc z
[^xyz] Tìm các ký tự không phải x,y hoặc z
[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 là chữ số từ 0-9

Ví dụ: Yêu cầu nhập vào textbox đúng định dạng số điện thoại XXX-XXX-XXXX và không được nhập chữ cái.
<html>
    <head>
        <script language="javascript">
            var reg = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
            function testPhone(){  
              var PhoneNumber = document.getElementById('tbPhone');
              var tagP = document.getElementById('01');
              var OK = reg.exec(PhoneNumber.value); 
              if (!OK)
              	 tagP.innerHTML = "Định dạng phone không hợp lệ !"; 
              else
                tagP.innerHTML = "Phone OK !";
            }  
        </script>  
       
    </head>
    <body>
        <input id="tbPhone" type="text" value="" placeholder="Nhập Phone" onkeyup="testPhone()"/>
        <p id="01"></p>
    </body>
</html>

      Nhìn chung để sử dụng nâng cao Regular Expression cần phải có thời gian nghiên cứu và thực hành khá nhiều, bài này chỉ giới thiệu các đặc điểm cơ bản. Chúc bạn thành công.