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

=>[…]" ]