JavaScript Nguyễn Thị Thùy Liên Regular Expression là gì? RegEx là một biểu thức thường được dùng để mô tả một mẫu chuỗi (string pattern) và được gọi là Biểu thức chính quy Một biểu thức bao gồm c.
Nguyễn Thị Thùy Liên Regular Expression gì? RegEx biểu thức thường dùng để mô tả mẫu chuỗi (string pattern) gọi Biểu thức quy Một biểu thức bao gồm toán tử toán hạng Toán tử: Các phép toán (VD: cộng, trừ, nhân, chia…) Toán hạng: Biến, giá trị dùng để tính tốn RegEx thường dùng phép tốn tìm kiếm, so sánh chuỗi theo mẫu Khai báo Regex C1: var patt = new RegExp(“pattern”, “modifiers”); C2: var patt = new RegExp(“pattern”); C3: var patt = /pattern/modifiers Một mẫu chuỗi đơn giản Chỉ bao gồm nhóm ký tự đặt cặp dấu // Ví dụ: var str = "Ngoai hien giot mua thu thot roi"; var patt1 = /thu/; var result = str.match(patt1); document.write(result); RegEx JavaScript Cú pháp: /pattern/modifiers Trong đó: Pattern: Mẫu chuỗi (RegEx) Modifiies: Chuỗi xác định tình tuỳ chọn khác /g: ("global" matching) Khi sử dụng phương thức replace(), giá trị thay tất cụm từ tìm thấy thay cụm từ /i: so sánh không phân biệt hoa thường /m: so sánh chế độ đa dịng Có thể phối hợp nhiều modifie VD: /gi Ký tự đặc biệt Trong cú pháp regex có ký tự mang nghĩa đặc biệt, chúng gọi metacharacter: [\^$.|?*+() Nếu cần dùng ký tự với ý nghĩa thông thường, ta phải giải phóng \ VD cần so khớp 1+1=2, regex 1\+1=2 Chú ý 1+1=2 regex đúng, nên ko báo lỗi, ko cho ta kết mong muốn Regex 1+1=2 so khớp với 111=2 chuỗi 123+111=234, dấu + mang ý nghĩa đặc biệt Các hàm đối tượng RegEx Các phương thức đối tượng chuỗi hỗ trợ RegEx S.search(): Tìm chuỗi phù hợp với biểu thức cho trả vị trí chuỗi S.match(): Tìm chuỗi theo mẫu trả mảng giá trị tìm thấy S.replace(): Thay chuỗi chuỗi khác phù hợp với mẫu tìm kiếm Các hàm đối tượng RegEx(2) S.test() : Hàm kiểm tra tham số truyền vào có trùng với chuỗi "pattern" mà ta định nghĩa hay không Hàm trả giá trị true chuỗi nhập vào có mẫu ta cần tìm false tìm khơng thấy S exec(): Hàm trả mảng chứa đoạn trùng khớp với "pattern" định nghĩa trả null khơng tìm thấy Các hàm đối tượng RegEx(3) Ví dụ: var s="Thu mot ti, thu hai Ti"; document.write(s.match(/t/g)); //t,t,t document.write(s.match(/t/gi)); // T,t,t,t,T Tìm kiếm theo vị trí TT Ký hiệu Ý nghĩa ^abc Trả chuỗi abc chuỗi abc vị trí chuỗi cho abc$ Trả chuỗi abc chuỗi abc vị trí cuối chuỗi \babc, abc\b Trả chuỗi abc chuỗi vị trí đầu cuối từ chuỗi Nếu cần so sánh vị trí cuối từ, đặt biểu thức \b vị trí cuối từ \Babc Trả chuỗi abc chuỗi khơng nằm vị trí đầu cuối từ (tuỳ thuộc vào vị trí đặt \B đầu cuối từ) ?=xyz Trả chuỗi theo sau chuỗi chuỗi xyz ?!xyz Trả chuỗi sau chuỗi khơng phải chuỗi xyz Ví dụ var s="Thu mot ti, thu hai Ti"; document.write(s.match(/^Thu/i)); //Thu document.write(s.match(/t$/gi)); //null document.write(s.match(/ti$/gi)); //Ti document.write (""); document.write(s.match(/\bti/gi));//ti,Ti document.write (""); document.write(s.match(/\Bai/gi));//ai document.write (""); document.write(s.match(/th(?=u)/gi));//Th,th document.write (""); document.write(s.match(/t(?!h)/gi));//t,t,T Các thành tố (Literal) STT Ký hiệu Ý nghĩa \0 Tìm ký tự NULL \n Tìm ký tự tạo dịng \xxx Tìm ký tự ASCII biểu diễn số thập phân xxx \xdd Tìm ký tự ASCII biểu diễn số hex dd \uxxxx Tìm ký tự ASCII biểu diễn mã Unicode xxxx Các lớp ký tự STT Ký hiệu Ý nghĩa [xyz] Tìm ký tự nằm tập ký tự cặp dấu ngoặc vng [^xyz] Tìm ký tự không nằm tập ký tự dấu ngoặc vng Tìm ký tự khơng phải ký tự xuống dịng (new line) ký tự kết thúc dòng (line terminator) \w Tìm ký tự dạng a-Z, 0-9 dấu gạch \W Ngược lại với \w \d Tìm ký tự thuộc tập ký tự từ đến \D Ngược lại với \d: Tìm ký tự khơng nằm tập ký tự từ đến \s Tìm ký tự cách \S Tìm ký tự dấu cách Metacharacter lớp ký tự Trong lớp ký tự, ký tự mang ý nghĩa đặc biệt hay metacharacter bao gồm: ] \ ^ Để đặt ký tự \ vào lớp ký tự với nghĩa thơng thường, cần giải phóng ký tự \ khác VD: [\\x] khớp với ký tự \ x Các ký tự ] ^ - muốn dùng theo nghĩa thông thường phải dc giải phóng \ đặt vị trí mà ko có ý nghĩa đặc biệt Metacharacter lớp ký tự (2) Với ^, đặt chỗ trừ vị trí sau [ VD: [x^] khớp với x ^ Với ], đặt sau [ [^ VD: []x] khớp với ] x [^]x] khớp với ký tự ko phải ] x Với -, đặt sau [ [^ , trước ] VD: [-x] [x-] so khớp với - x var str = "1 voi la 2, them la 4"; document.write(str.match(/[e-h]/gi));//h,e document.write (""); document.write(str.match(/[^a-mu ]/gi));//1,v,o,1,2,,,2,t,2,4 document.write (""); document.write(str.match(/oi\W/gi));//oi document.write (""); document.write(str.match(/\d/gi));//1,1,2,2,2,4 document.write (""); document.write(str.match(/\D[^b-t ]/g));//v, 1,la, 2, 2, 2,la, document.write (""); document.write(str.match(/\s/g));//, , , , , , , , document.write (""); document.write(str.match(/\S/g));//1,v,o,i,1,l,a,2,,,2,t,h,e,m,2,l,a,4 Biểu thức lặp theo độ dài STT Ký hiệu Ý nghĩa {x} Tìm kiếm ký tự/cụm ký tự có độ dài xác x lần {x,} Tìm kiếm ký tự/cụm ký tự có độ dài>=x lần {x,y} Tìm kiếm ký tư/cụm ký tự có chiều dài từ x đến y lần ? Tìm kiếm ký tự/cụm ký tự có chiều dài =0 + Tìm kiếm ký tự/cụm ký tự có chiều dài>=1 VD var str = "Ai mua xoi deeeeee"; document.write (str.match(/[de]{3}/g));//dee,eee document.write (str.match(/[de]{3,}/g));//deeeeee document.write (str.match(/[de]{3,5}/g))//deeee // Tim chu d, sau chu d la hoac chu e document.write (str.match(/de?/g)); // Tim chu d, sau chu d la hoac n chu e document.write (str.match(/de*/g)); // Tim chu d, sau chu d la hoac n chu e document.write (str.match(/de+/g)); //Tim tat ca cac tu bao gom cac chu cai tu a den z document.write (str.match(/[a-z]*/gi)); //Tim tat ca cac tu bao gom cac chu cai tu a den z, sau tu la mot dau cach: document.write (str.match(/[a-z]* +/gi)); Phân nhóm STT Ký hiệu Ý nghĩa () Tìm kiếm nhóm ký tự bên cặp dấu ngoặc lưu vào chuỗi kết (?: ) Tìm kiếm chuỗi kết không chứa tập ký tự nằm cặp dấu ngoặc | Phép toán hoặc, sử dụng để kết hợp mệnh đề với vào chung biểu thức ( )\n Back reference Uses the stored matched string i.e from the ( ) modifier VD: var str = "Email: mail@ttt.com, test@ttt.com.vn, sinhln@hnue.edu.vn"; // Tim tat ca cac dia chi email chuoi document.write (str.match(/([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z09]{2,4})+/gi)); //Tim tat ca cac so chuoi str=" 12312 and 343 and 54q"; document.write (str.match(/[0-9]+/g)); // hoac document.write(str.match(/\d+/g)); nhập kiểm tra liệu Nguyên lý: Sử dụng hàm kết hợp với kiện onSubmit thẻ form Hàm kiểm tra phải trả kết dạng true/false Nếu kết trả false: Dữ liệu form khơng gửi đi, người dùng chỉnh sửa lại trước tái submit Nếu kết khác false: Dữ liệu form gửi tới trang web định thuộc tính action Một số trường hợp thường dùng: Kiểm tra xem người dùng có nhập vào số ko? Số có giá trị từ đến bao nhiêu? Kiểm tra xem người dùng có nhập format tên truy cập không? Tên truy cập thường gồm ký tự từ a-Z, 0-9 phải bắt đầu ký tự Kiểm tra xem người dùng có nhập địa email hay url không? Kiểm tra xem người dùng có nhập liệu dạng ngày tháng không? … ... trị dùng để tính tốn RegEx thường dùng phép tốn tìm kiếm, so sánh chuỗi theo mẫu Khai báo Regex C1: var patt = new RegExp(“pattern”, “modifiers”); C2: var patt = new RegExp(“pattern”); ... var str = "Ngoai hien giot mua thu thot roi"; var patt1 = /thu/; var result = str.match(patt1); document.write(result); RegEx JavaScript ... 1+1=2 Chú ý 1+1=2 regex đúng, nên ko báo lỗi, ko cho ta kết mong muốn Regex 1+1=2 so khớp với 111=2 chuỗi 123+111=234, dấu + mang ý nghĩa đặc biệt Các hàm đối tượng RegEx Các phương thức