Giả sử chúng ta có một số điện thoại như thế này:"+84(90)123.4567", và chúng ta cần biến nó thành các số thuần túy 0901234567

Để làm như vậy chúng ta sẽ xóa bất cứ thứ gì không phải số.

Ví dụ: Tìm chữ số đầu tiền trong số điện thoại: (không có cờ g)

let str = "+84(90)123.4567";
let regexp = /\d/;
alert( str.match(regexp) ); // 8

Ví dụ: Có cờ g

let str = "+84(90)123.4567";
let regexp = /\d/g;

alert( str.match(regexp) ); // mảng có các phần tử : 8,4,9,0,1,2,3,4,5,6,7

//dùng hàm join để nối mảng
alert( str.match(regexp).join('') ); // 84901234567

ĐỌC NHANH QUA BẢNG BIỂU THỨC SAU TRƯỚC KHI TIẾP CÁC VÍ DỤ

STTBiểu thứcMô tảGhi chú
01a|bKhớp với a hoặc b 
02[0-9]Khớp với một trong số từ 0 tới 9 
03[a-z]Khớp với một trong chữ từ a tới z 
04[abc]Có thể khớp với a, b hoặc c 
05[^abc]Khớp với bất kì kí tự nào ngoài a, b và cNếu ^ xuất hiện đầu tiên sau ngoặc vuông, nó có nghĩa là phủ định

 

06\dSố bất kìTương dương với [0-9]
07\DKhông phải là sốTương dương với [^0-9]
08\s khoảng trắng 
09\SKhông phải khoảng trắngTương dương với [^\s]
10\S+Không phải khoảng trắng tiếp đó (+)  là 1 dãy không phải khoảng trắng Một hoặc một số
11\wKí tự chữ và chữ số kèm dấu rạch chân

Đối với ASCII, các ký tự từ là

[a-zA-Z0-9_]

12\W Ngoài bảng chữ cáiTương dương với [^\w]
13\bRanh giới của từ, tức là đầu từ hoặc cuối từ.Ví dụ: \bcat\bkhớp với từ "cat"trong chuỗi đầu vào.

 

4.2 Ký tự đặc biệt

TTBiểu thứcMô tảGhi chú
14.Bất kỳ ký tự nào ngoại trừ xuống dòng 
15^Bắt đầu của từ 
16$Kết thúc của từ 
17/Bắt đầu hoặc kết thúc chuỗi regex 
18Sủ dụng tương đương phép orHay dùng trong cặp ngoặc tròn
19\

\b => \ký tự thường

\* => \ký tự đặc biệt

VD: \b b sẽ trở thành nhóm đặc biệt, \* thì * sẽ trở thành kí tự thường là * chứ không phải là lặp lại

 

4.3 Lặp

STTBiểu thứcMô tảGhi chú
20*Xuất hiện 0 hoặc nhiều lầnviết ngắn gọn cho {0,}
21+Xuất hiện 1 hoặc nhiều lầnviết ngắn gọn cho {1,}
22?Xuất hiện 0 hoặc 1 lầnviết ngắn gọn cho {0,1}
23{X}Xuất hiện X lầnX không phải số âm
24{X,Y}Xuất hiện trong khoảng X tới Y lầnX,Y không phải số âm
25?có nghĩa là xuất hiện 0 hoặc nhiều lần, thêm ? phía sau nghĩa là tìm kiếm khớp nhỏ nhất

 

4.4 Khớp nhóm

STTBiểu thứcMô tảGhi chú
26()Khớp với một nhóm các kí tự đồng thời nhớ kết quả khớpVí dụ (e|g)mail sẽ khớp với email hoặc gmail. /(ab) (cd) \1 \2/ sẽ khớp với “ab cd ab cd”
27(?:x)Khớp với x nhưng không nhớ kết quả khớp“foo foo” sẽ khớp với /(foo) \1/ chứ không khớp với (?:foo) \1
28x(?=y)Chỉ khớp x nếu ngay sau x là y“hello” sẽ khớp với /h(?=e)/ nhưng kết quả trả về chỉ có h
29x(?!y)Chỉ khớp x nếu ngay sau x không phải là y

Ví dụ:

Một regexp có thể chứa cả ký hiệu thông thường và các lớp ký tự.

let str = "Is there CSS4?";
let regexp = /CSS\d/

alert( str.match(regexp) ); // CSS4

Ngoài ra, chúng ta có thể sử dụng nhiều lớp ký tự:

alert( "I love HTML5!".match(/\s\w\w\w\w\d/) ); // ' HTML5'

Đối sánh (mỗi lớp ký tự regexp có ký tự kết quả tương ứng):

Lớp & ký Tự (Character classes)

inverse-classes (lớp nghịch đảo)

Đối với mỗi lớp ký tự tồn tại một “lớp nghịch đảo”, được biểu thị cùng một chữ cái, nhưng viết hoa.

Lớp \D

\D

Ngịch đảo của \d (là chữ số digit number) => không phải digit number)

\S

không phải là khoảng trắng (space \s ( là khoảng trắng)

\W

không phải là một từ  (word +number [a-zA-Z-0-9_])  \w (là chữ cái)

Dùng match

let str = "+84(90)123.4567";
alert( str.match(/\d/g).join('') ); // 84901234567

Dùng replace ( \D không phải digit number)

let str = "+84(90)123.4567";
alert( str.replace(/\D/g, "") ); // 84901234567  -- tìm kiếm và lặp (không phải chữ số - global sang rỗng)

 

.Dấu chấm . là “bất kỳ ký tự nào”

alert( "Z".match(/./) ); // Z

Dấu . ở giữa regexp:

let regexp = /CS.4/;

alert( "CSS4".match(regexp) ); // CSS4
alert( "CS-4".match(regexp) ); // CS-4
alert( "CS 4".match(regexp) ); // CS 4 (space is also a character)

.Lưu ý: dấu châm bắt buộc phải có 1 ký tự nếu không sẽ báo lỗi

alert( "CS4".match(/CS.4/) ); // null, không khớp vì không có ký tự nào cho dấu chấm

2 trường hợp dấu chấm kết hợp với cờ s và không cờ (space)

alert( "A\nB".match(/A.B/) ); // null (no match)
alert( "A\nB".match(/A.B/s) ); // A\nB (match!)

Trường Hợp với khoảng trắng

//trường hợp lỗi
alert( "1 - 5".match(/\d-\d/) ); // null, no match!

//trường hợp làm việc
alert( "1 - 5".match(/\d - \d/) ); // 1 - 5, now it works
// hoặc bạn có thể sử dụng regexp \s
alert( "1 - 5".match(/\d\s-\s\d/) ); // 1 - 5, also works
 

khoảng