1. Cách khai báo so mẫu trong JS
a. var regexp = /pattern/flags
ví dụ: var re1 = /mac/i;
b. var regexp = new RegExp("pattern","flags");
ví dụ: var re2 = new RegExp("mac","g");
Ví dụ về so mẫu (VD 1)
str = 'mac is operator in mac PC';
var re1 = /mac/;
var re2 = new RegExp("mac","g");
alert('VD 1.1: '+str.replace(re1,'Test'));
alert('VD 2.2: '+str.replace(re2,'Test'));
</script>
2. Các giá trị của flag:
i: không phân biệt chữ hoa chữ thường
ví dụ: /The/i gồm "the" và "The" và "tHe"
g: tìm tất cả các chuỗi thỏa so mẫu
m: tìm trên nhiều dòng (JavaScript1.5+)
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 ( những ký tự
{n}: chính xác n lần
ví dụ: /d{5}/ tìm những số có 5 chữ số
{n,}: nhiều hơn 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
ví dụ: /d{5,9}/ tìm những số có 5 đến 10 chữ số
(pattern) tìm và bắt lấy /pattern/
ví dụ: /(d).1/ thì 1 chính là giá trị đại diện của (d)
=> so mẫu này sẽ tìm chuỗi dạng /d.d/ ( tức dad,dbd,..)
(?:pattern) tìm nhưng không bắt lấy
ví dụ: /(?:d).1/ thì 1 chính không phải là đại diện của (d)
Lưu ý: (?:pattern) hổ trợ từ JavaScript 1.5.
| tìm thay phiên
ví dụ: /(a|b)a/ tìm những chuỗi aa hoặc ba.
[characters]: chứa bất kỳ ký tự characters
ví dụ: /[abcd]/( dạng ngắng /[a-d]/) tìm các ký tự 'a', 'b', 'c', 'd'
[^characters]: không chứa bất kỳ ký tự characters
ví dụ: /[^0-9]/ tìm tất cả các ký tự không phải là các ký tự số
* dạng ghi ngắn của {0,}
+ dạng ghi ngắn của {1,}
? dang ghi ngắn của {0,1}
^ điểm bắt đầu (or new line with m flag).
$ điểm kết thúc (or end of line with m flag).
. tìm bất kỳ ký tự nào trừ ký tự xuống dòng.
Alphanumeric: tìm chính xác các ký tự Alphanumeric
ví dụ: /2 days/ sẽ tìm "2 days" trong chuỗi
\f matches form-feed.
\r matches carriage return.
\n matches linefeed.
\t ký tự tab (ngang).
\v ký tự tab (đứng).
\� tìm ký tự NUL.
[\b] ký tự xóa.
\s những ký tự khoảng trắng (dạng ngắn của [\f\n\r\t\v\u00A0\u2028\u2029]).
S không phải là ký tự khoảng trắng (dạng ngắn của [^\f\n\r\t\v\u00A0\u2028\u2029]).
\w những ký tự là chữ,số hoặc _ (dạng ngắn của [a-zA-Z0-9_]).
\W những ký tự không là chữ, số hoặc _ (short for [^a-zA-Z0-9_]).
\d những ký tự số (dạng ngắn của [0-9]).
\D không phải là ký tự số (dạng ngắn của [^0-9]).
\b những ký tự boundary (vị trí giữa 1 từ và khoảng trắng).
\B không phải là ký tự boundary (dạng ngắn [^b]).
\cX ký tự Control. Ví dụ: cm tìm control-M.
\xhh tìm chuỗi ký tự hệ 16 dạng hh
\uhhhh tìm chuỗi ký tự unicode dạng hhhh.
4. Các cách sử dụng regexp
a. dùng method của string (str)
str.match(/pattern/ ) trả về 1 mảng các thông tin nếu tìm thấy và false nếu không tìm thấy /pattern/ trong str
var str = "Watch out for the rock!";
a = str.match(/r?or?/g)// kết quả: a = ["o","or","ro"]
str.replace( /pattern/, replacement_text ) tìm và thay thế /pattern/ thành replacement_text
var str = "Liorean said: My name is Liorean!".replace(/Liorean/g,'Big Fat Dork')
kết quả: str = "Big Fat Dork said: My name is Big Fat Dork!"
str.split ( /pattern/ ) chia str thành 1 array
var str = "I am confused".split(/s/g)
kết quả: str = ["I","am","confused"]
str.search(/pattern/) trả về vị trí đầu tiên của /pattern/ trong str và -1 nếu không tìm thấy
var str = "Watch out for the rock!"
ndx = str.search(/for/) //kết quả : 10
b. dùng method và property của RegExp
+ method:
/pattern/.test(string) trả về true nếu /pattern/ tồn tại trong string và ngược lại
/pattern/.exec(string) trả về array thông nếu /pattern/ tồn tại trong string và ngược lại trả về false
+ property:
$n: với 0< n < 9
ví dụ:
re = /(Hello)(s+)(world)/ thì re.$2 chính là tất cả khoảng trắng nằm giữa Hello và world ( giá trị của (s+))
source: chứa bản copy của so mẫu
global: kiểm tra flag "g" trong so mẫu
ignoreCase: kiểm tra flag "i" trong so mẫu
lastIndex: vị trí ký tự đầu tiên của pattern tìm thấy cuối cùng trong str
Có một số chỗ không chính xác, anh em bổ sung thêm
Tác giả:TG
Webmaster
http://phpbasic.com
