Dấu gạch ngang bên trong bộ ký tự trong biểu thức chính quy JavaScript

Dấu gạch ngang - cũng là ký tự đặc biệt bên trong [ ] (còn bên ngoài thì không). Nếu bạn cần chính dấu gạch ngang như một ký tự - hãy đặt nó ở vị trí mà nó sẽ không được hiểu là dấu phân cách nhóm.

Tại sao điều này quan trọng: bạn có thể tạo ra một nhóm ký tự mà không hề nhận ra. Ví dụ, như thế này - '[:-@]' - bạn nghĩ rằng bạn đang chọn dấu hai chấm, dấu gạch ngang và dấu @, nhưng thực ra lại là một nhóm các ký tự nằm giữa : và @. Nhóm này bao gồm các ký tự sau: ? < = > : ;

Chúng lấy từ đâu ra? Từ bảng ASCII - dấu hai chấm có số thứ tự nhỏ hơn dấu @ - và kết quả là một nhóm. Tức là tất cả các nhóm được tạo ra dựa trên bảng ASCII (nếu muốn có thể sử dụng điều này).

Cách xử lý: đặt ký tự dấu gạch ngang ở nơi mà nó chắc chắn sẽ không bị hiểu là ký tự tạo nhóm, ví dụ, ở đầu hoặc ở cuối (tức là sau [hoặc trước ]).

Cũng có thể thoát dấu gạch ngang - khi đó nó sẽ đại diện cho chính nó bất kể vị trí. Ví dụ, thay vì [:-@] hãy viết [:\-@] - và sẽ không có nhóm nữa, mà sẽ có ba ký tự - dấu hai chấm, dấu gạch ngang và dấu @ @.

Ví dụ

Trong ví dụ sau, mẫu tìm kiếm như sau: chữ số 1, sau đó là chữ cái từ 'a' đến 'z', sau đó là chữ số 2:

javascriptlet str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a-z]2/g, '!');

Kết quả, biến sẽ ghi nhận giá trị sau:

javascript'! 1-2 ! !'

Ví dụ

Bây giờ hãy thoát dấu gạch ngang. Kết quả mẫu tìm kiếm như sau: chữ số 1, sau đó là chữ cái 'a', hoặc dấu gạch ngang, hoặc chữ cái 'z', sau đó là chữ số 2:

javascriptlet str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a\-z]2/g, '!');

Kết quả, biến sẽ ghi nhận giá trị sau:

javascript'! ! 1c2 !'

Ví dụ

Có thể chỉ cần đổi vị trí dấu gạch ngang mà không cần thoát nó:

javascriptlet str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[az-]2/g, '!');

Kết quả, biến sẽ ghi nhận giá trị sau:

javascript'! ! 1c2 !'

Ví dụ

Trong ví dụ sau, mẫu tìm kiếm như sau: ký tự đầu tiên - là chữ cái thường hoặc dấu gạch ngang '-', sau đó là hai chữ cái 'x':

javascriptlet str = 'axx Axx -xx @xx';
let res = str.replace(/[a-z-]xx/g, '!');

Kết quả, biến sẽ ghi nhận giá trị sau:

javascript'! Axx ! @xx'

Ví dụ

Trong ví dụ sau, mẫu tìm kiếm như sau: ký tự đầu tiên - là chữ cái thường, chữ cái hoa hoặc dấu gạch ngang '-', sau đó là hai chữ cái 'x':

javascriptlet str = 'axx Axx -xx @xx';
let res = str.replace(/[a-zA-Z-]xx/g, '!');

Kết quả, biến sẽ ghi nhận giá trị sau:

javascript'! ! ! @xx'

Ví dụ

Có thể đặt dấu gạch ngang giữa hai nhóm - ở đó chắc chắn nó sẽ không tạo thêm một nhóm khác:

javascriptlet str = 'axx 9xx -xx @xx';
let res = str.replace(/[a-z-0-9]xx/g, '!');

Kết quả, biến sẽ ghi nhận giá trị sau:

javascript'! ! ! @xx'

Bài tập thực hành

Задание 1

Cho chuỗi:

javascriptlet str = 'xaz xBz xcz x-z x@z';

Tìm tất cả các chuỗi theo mẫu sau: chữ cái 'x', chữ cái hoa hoặc thường hoặc dấu gạch ngang, chữ cái 'z'.

Задание 2

Cho chuỗi:

javascriptlet str = 'xaz x$z x-z xcz x+z x%z x*z';

Tìm tất cả các chuỗi theo mẫu sau: chữ cái 'x', sau đó là dấu đô la, hoặc dấu gạch ngang hoặc dấu cộng, sau đó là chữ cái 'z'.