JS RegExp
Bài viết được sưu tầm từ choncon, phpbasic.
RegExp Là Gì ?
RegExp có thể hiểu đơn giản là một biểu thức chính qui.
Khi bạn muốn tìm kiếm trong một chuỗi kí tự bạn phải dùng các “mẫu giải thích” để thực hiện việc tìm kiếm. RegExp là một cách viết các “mẫu” đó.
Một “mẫu” đơn giản nhất là một kí tự chẳng hạn : a
Một “mẫu” hoàn chỉnh và đầy đủ sẽ đòi hỏi bao gồm nhiều kí tự ,các kí hiệu thay thế sắp xếp theo một công thức đúng …
Với các “mẫu” được viết ra bạn có thể dùng nó để xác định và tìm kiếm các vị trí trong một chuỗi và nhiều công việc khác nữa …
Chúng ta định nghĩa một đối tượng RegExp bằng từ khóa: “new” .Đoạn code sau định nghĩa một đối tượng RegExp có là patt1 với biểu thức mẫu đơn giản là “e”
var patt1=new RegExp("e");
Khi chúng ta sử dụng biến partt1 cho việc tìm kiếm trong một chuỗi chúng ta sẽ tìm thấy kí tự “e”
Các Phương Thức Của RegExp
Có 3 phương thức chuẩn là : test(),exec() và compile()
Test()
Phương thức này dùng cho việc tìm kiếm chuỗi trong một giá trị xác định , giá trị trả lại là true ( nếu giá trị có chứa chuỗi thích hợp với biểu thức tìm kiếm ) hoặc false (nếu ngược lại )
Ví dụ:
var patt1=new RegExp("e");
document.write(patt1.test("Well come to my blog !")+"<br />");
document.write(patt1.test("Cam on ban da vao blog cua toi !"));
true
false
Đâ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)
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
Popularity: 6% [?]
No comments yet.