Chủ Nhật, 2 tháng 5, 2010

So mẫu (RegExp) trong javascript


Đây là phần kiến thức cơ bản về so mẫu trong JS được thống kê lại để dễ tham khảo,về cơ bản thì so mẫu đều giống nhau chỉ khác nhau về hình thức trên từng ngôn ngữ lập trình, nên nếu bạn nắm tốt so mẫu trong js thì trong php cùng tương tự, hy vọng giúp ích cho các bạn.


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)



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ặc định trong js, chỉ tìm phần tử đầu tiên ( ví dụ VD 1.1) , khi dùng flag "g" JS sẽ tìm tất cả trong chuỗi ( VD 1.2)
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,..)
(? [:P] attern) 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 ý: (? [:P] attern) 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
ví dụ:
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
ví dụ:
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
ví dụ:
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
ví dụ:
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
ví dụ: var match = /sample/.test("Sample text") // kết quả : false

/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
ví dụ: var match = /s(amp)le/i.exec("Sample text") // kết quả ["Sample","amp"]

+ 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, các bạn tham khảo và bổ sung thêm.

Theo phpbasic

0 nhận xét:

Đăng nhận xét