Dấu chấm thoát trong một dải regex


76

Vì một số lý do mà hai regex đó hoạt động theo cùng một cách:

"43\\gf..--.65".replace(/[^\d.-]/g, "");​  // 43..--.65
"43\\gf..--.65".replace(/[^\d\.-]/g, "");​  // 43..--.65

Bản giới thiệu

Trong regex đầu tiên, tôi không thoát khỏi dấu chấm ( .) trong khi ở regex thứ hai, tôi làm ( \.).

Sự khác biệt là gì và tại sao chúng hoạt động giống nhau?

Câu trả lời:


63

Vì dấu chấm nằm bên trong lớp ký tự (dấu ngoặc vuông []).

Hãy xem http://www.regular-expressions.info/reference.html , nó cho biết (trong phần lớp char):

Bất kỳ ký tự nào ngoại trừ ^ -] \ thêm ký tự đó vào các kết quả phù hợp có thể có cho lớp ký tự.


7
và dấu trừ ( -) chỉ cần được thoát nếu nó ở giữa phạm vi?
gdoron đang hỗ trợ Monica

3
Nếu bạn muốn khớp với dấu gạch ngang, hãy thêm dấu gạch ngang đó ngay sau khi mở ngoặc vuông, ví dụ [-AZ]. Nếu không, dấu gạch nối chỉ định phạm vi. Nó hoạt động trong trường hợp của bạn có thể chỉ vì bạn không xác định phạm vi trong regex, nhưng tôi khuyên bạn nên làm theo tham chiếu, phòng trường hợp bạn sẽ thêm phạm vi sau này.
usoban

3
hoặc ngay trước dấu ngoặc đóng hoặc bạn có thể thoát khỏi nó bằng một dấu gạch chéo
Code Jockey

101

Toán tử dấu chấm .không cần phải thoát bên trong một lớp ký tự [].


35

Nếu bạn sử dụng JavaScript để kiểm tra Regex của mình, hãy thử \\.thay vì \..

Nó hoạt động theo cùng một cách vì JS loại bỏ dấu gạch chéo ngược đầu tiên.


3
Điều này đã cứu tôi ngày hôm nay. Tôi không thể hiểu tại sao biểu thức không hoạt động. Cảm ơn
Mārtiņš Radiņš

4

Trên trang web này , tôi thấy rằng:

"Hãy nhớ rằng dấu chấm không phải là một siêu ký tự bên trong một lớp ký tự, vì vậy chúng ta không cần phải thoát khỏi nó bằng một dấu gạch chéo ngược."

Vì vậy, tôi đoán việc thoát khỏi nó là không cần thiết ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.