Dãy [Range] =>[…]
Sets and ranges [...] ( Bộ và dãy)
Một số ký tự hoặc lớp ký tự bên trong dấu ngoặc vuông […] có nghĩa là “tìm kiếm bất kỳ ký tự nào trong số các ký tự đã cho”
Sets (bộ)
Ví dụ: [eao]có nghĩa là bất kỳ ký tự nào trong 3 ký tự 'a':, 'e'hoặc 'o'.
// tìm [t hoặc m], và đến "op"
alert( "Mop top".match(/[tm]op/gi) ); // "Mop", "top"
Lưu ý mặc dù có nhiều ký tự trong tập hợp, nhữngchúng tương ứng với chính xác một ký tự
// tìm "V", sau đó [o hoặc i], sau đó "la"
alert( "Voila".match(/V[oi]la/) ); // null, không khớp
Dấu Ngoặc vông còn được xác định theo dãy ví dụ [a-z] ( bên dưới tìm thấy xAE do ký tự cuối là tập hợp theo dãy.
alert( "Exception 0xAE".match(/x[0-9A-F][0-9A-F]/g) ); // xAE
Ngoại trừ dãy
Ví dụ:
- [^aeyo]- bất kỳ ký tự nào ngoại trừ 'a', hoặc .'e''y''o'
- [^0-9]- bất kỳ ký tự nào ngoại trừ một chữ số, giống như \D.
- [^\s]- bất kỳ ký tự không phải dấu cách , giống như \S.
console.log( "[email protected]".match(/[^\d\sA-Z]/gi) ); // bắt đầu chuỗi ngoại trừ: digit number + khoảng trắng (space) và ký tự hoa từ A-Z) // cờ i tương dương với [a-zA-Z]
Escaping in […] ( Thoát ký tự đặc biệt trong dãy)
Trong dấu ngoặc vuông, chúng ta có thể sử dụng phần lớn các ký tự đặc biệt mà không cần thoát: ( Escaping)
// )+. :là 3 ký tự không cần thoát
let regexp = /[)+.]/g;
console.log( "1 + 2. - 3^)".match(regexp) ); // khớp: (3) ['+', '.', ')']
// 1. dấu rạch - không cần thoát ở vị trí đầu hoặc cuối : khi nằm trong range []
let regexp = /[-)+.]/g;
console.log( "1 + 2. - 3^)".match(regexp) ); // khớp: (4) ['+', '.', '-', ')']
// Dấu - chỉ dùng thoát khi ở giữa: khi nằm trong range []
//nằm ở vị trí giữa (đã thoát) \-
let regexp2 = /[)+\-.]/g;
console.log( "1 + 2. - 3^)".match(regexp2) ); // khớp: (4) ['+', '.', '-', ')']
// - nằm ở vị trí giữa (không thoát) -
let regexp3 = /[)-+.]/g;
console.log( "1 + 2. - 3^)".match(regexp3) ); //: (3) ['+', '.', ')'] không tìm thấy - do nó được hiểu là phạm vi
//2.Dấu mũ ^chỉ được thoát ra ở phần đầu (nó có nghĩa là loại trừ).
// thoát dấu mữ \^ nằm trong dãy []
let regexp4 = /[\^)+.-]/g;
console.log( "1 + 2. - 3^)".match(regexp4) ); // khớp: (5) ['+', '.', '-', '^', ')']
// để mặc định dấu ^ nằm đầu tiên trong []
let regexp5 = /[^)+.-]/g;
console.log( "1 + 2. - 3^()".match(regexp5) ); // khớp: (9) ['1', ' ', ' ', '2', ' ', ' ', '3', '^', '(']
let regexp6 = /[^)+.-\s]/g; //thêm \s mặc định là lấy space nhưng bị ngịch đảo thành bỏ space - từ 9 giá trị còn 5 giá trị
console.log( "1 + 2. - 3^()".match(regexp6) ); // khớp: (5) ['1', '2', '3', '^', '(']
Khi Range gắn cờ u
console.log( '𝒳'.match(/[𝒳𝒴]/) ); // không có cờ u / nên kết quả sẽ khác do ký tự này mã hóa 4 byte
// cách tìm chính xác
console.log( '𝒳'.match(/[𝒳𝒴]/u) ); // 𝒳
// look for characters from 𝒳 to 𝒵
console.log( '𝒴'.match(/[𝒳-𝒵]/u) ); // 𝒴
// cách tìm mã
for(let i=0; i<'𝒳𝒴'.length; i++) {
console.log('𝒳𝒴'.charCodeAt(i)); // 55349, 56499, 55349, 56500
Bài tập Range:
// bài tập về Range
alert( "Java".match(/Java[^script]/) ); // null
console.log( "JavaSJavaA".match(/Java[^sa]/g) ); // ['JavaS', 'JavaA']
let regexp = /\d\d[-:]\d\d/g;
alert( "Breakfast at 09:00. Dinner at 21-30".match(regexp) ); // 09:00, 21-30