Dành: Tính năng này không còn được khuyến nghị. Mặc dù một số trình duyệt vẫn có thể hỗ trợ nó, nhưng nó có thể đã bị xóa khỏi các tiêu chuẩn web có liên quan, có thể đang trong quá trình bị loại bỏ hoặc chỉ có thể được giữ cho mục đích tương thích. Tránh sử dụng nó và cập nhật mã hiện có nếu có thể; Xem bảng tương thích ở cuối trang này để hướng dẫn quyết định của bạn. Xin lưu ý rằng tính năng này có thể ngừng hoạt động bất cứ lúc nào. This feature is no longer recommended. Though some browsers might still support it, it may have already been removed from the relevant web standards, may be in the process of being dropped, or may only be kept for compatibility purposes. Avoid using it, and update existing code if possible; see the
compatibility table at the bottom of this page to guide your decision. Be aware that this feature may cease to work at any time. CẢNH BÁO: Mặc dù escape() không bị phản đối nghiêm ngặt (như trong "bị xóa khỏi các tiêu chuẩn web"), nhưng nó được định nghĩa trong Phụ lục B của tiêu chuẩn ECMA-262, có trạng thái giới thiệu: Although escape() is not strictly deprecated (as in "removed from the Web standards"), it is defined in
Annex B of the ECMA-262 standard, whose introduction states: Tất cả các tính năng và hành vi ngôn ngữ được chỉ định trong phụ lục này có một hoặc nhiều đặc điểm không mong muốn và trong trường hợp không sử dụng di sản sẽ bị xóa khỏi đặc điểm kỹ thuật này. Các lập trình viên không nên sử dụng hoặc cho rằng sự tồn tại của các tính năng và hành vi này khi viết mã Ecmascript mới. …
Hàm escape() tính toán một chuỗi mới trong đó một số ký tự đã được thay thế bằng chuỗi thoát thập lục phân.escape() function computes a new string in which certain characters have been replaced by a hexadecimal escape sequence.
LƯU Ý: Hàm này được sử dụng chủ yếu cho các truy vấn URL (phần của URL sau ____ 10), không thể thoát khỏi các chuỗi chuỗi thông thường, sử dụng định dạng alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)1. (alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)2 là hai chữ số thập lục phân và dạng alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)3 được sử dụng cho các ký tự unicode mặt phẳng cao hơn.) This function was used mostly for URL queries (the part of a URL following alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)0)—not for escaping ordinary String literals, which use the format alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)1. (alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)2 are two hexadecimal digits, and the form alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)3 is used for higher-plane Unicode characters.)
Các ký tự đã thoát trong các chữ cái có thể được mở rộng bằng cách thay thế alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)4 bằng alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)5, sau đó sử dụng hàm alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)6.
Cú pháp
Thông số
alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)7
Một chuỗi được mã hóa.
Giá trị trả về
Một chuỗi mới trong đó một số ký tự đã được thoát ra.
Sự mô tả
Hàm alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)8 là một thuộc tính của đối tượng toàn cầu. Các ký tự đặc biệt được mã hóa ngoại trừ: alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)9
Hình thức thập lục phân cho các ký tự, có giá trị đơn vị mã là alert( "function g()".match(/g\(\)/) ); // "g()"0 hoặc ít hơn, là một chuỗi thoát hai chữ số: alert( "function g()".match(/g\(\)/) ); // "g()"1. Đối với các ký tự có đơn vị mã lớn hơn, định dạng bốn chữ số alert( "function g()".match(/g\(\)/) ); // "g()"2 được sử dụng.
Ví dụ
Sử dụng lối thoát
escape("abc123"); // "abc123" escape("äöü"); // "%E4%F6%FC" escape("ć"); // "%u0107" // special characters escape("@*_+-./"); // "@*_+-./"
Thông số kỹ thuật
Đặc tả ngôn ngữ Ecmascript # sec-escape-string # sec-escape-string |
Tính tương thích của trình duyệt web
Bảng BCD chỉ tải trong trình duyệt
Xem thêm
Như chúng tôi đã thấy, một dấu gạch chéo ngược alert( "function g()".match(/g\(\)/) ); // "g()"3 được sử dụng để biểu thị các lớp ký tự, ví dụ: alert( "function g()".match(/g\(\)/) ); // "g()"4. Vì vậy, nó là một nhân vật đặc biệt trong RegEXP (giống như trong các chuỗi thông thường). Cũng có những nhân vật đặc biệt khác, có ý nghĩa đặc biệt trong RegEXP, chẳng hạn như alert( "function g()".match(/g\(\)/) ); // "g()"5. Chúng được sử dụng để thực hiện các tìm kiếm mạnh mẽ hơn. Don Tiết cố gắng ghi nhớ danh sách - chẳng mấy chốc chúng tôi sẽ đối phó với từng người trong số họ và bạn sẽ tự động biết họ bằng trái tim. Hãy nói rằng chúng tôi muốn tìm một dấu chấm theo nghĩa đen. Không phải là bất kỳ nhân vật nào, mà chỉ là một dấu chấm. Để sử dụng một ký tự đặc biệt như một nhân vật thông thường, hãy dành cho nó bằng một dấu gạch chéo ngược: alert( "function g()".match(/g\(\)/) ); // "g()"6. Đó cũng là người được gọi là Escaping một nhân vật.Trốn thoát
Ví dụ:
alert( "Chapter 5.1".match(/\d\.\d/) ); // 5.1 (match!) alert( "Chapter 511".match(/\d\.\d/) ); // null (looking for a real dot \.)
Điểm dừng cũng là những nhân vật đặc biệt, vì vậy nếu chúng ta muốn chúng, chúng ta nên sử dụng alert( "function g()".match(/g\(\)/) ); // "g()"7. Ví dụ dưới đây tìm kiếm một chuỗi alert( "function g()".match(/g\(\)/) ); // "g()"8:
alert( "function g()".match(/g\(\)/) ); // "g()"
Nếu chúng tôi đang tìm kiếm một dấu gạch chéo ngược alert( "function g()".match(/g\(\)/) ); // "g()"3, thì đó là một nhân vật đặc biệt trong cả hai chuỗi thông thường và regexps, vì vậy chúng tôi nên nhân đôi nó.
alert( "1\\2".match(/\\/) ); // '\'
Một chém
Một biểu tượng chém alert( "1\\2".match(/\\/) ); // '\'0 không phải là một nhân vật đặc biệt, nhưng trong JavaScript, nó được sử dụng để mở và đóng regexp: alert( "1\\2".match(/\\/) ); // '\'1, vì vậy chúng ta cũng nên thoát khỏi nó.
Ở đây, những gì một tìm kiếm cho một chém alert( "1\\2".match(/\\/) ); // '\'0 trông giống như:
alert( "/".match(/\//) ); // '/'
Mặt khác, nếu chúng tôi không sử dụng alert( "1\\2".match(/\\/) ); // '\'3, nhưng tạo ra một regexp bằng cách sử dụng alert( "1\\2".match(/\\/) ); // '\'4, thì chúng tôi không cần phải thoát khỏi nó:
alert( "/".match(new RegExp("/")) ); // finds /
Regexp mới
Nếu chúng ta đang tạo ra một biểu thức chính quy với alert( "1\\2".match(/\\/) ); // '\'4, thì chúng ta không phải trốn thoát alert( "1\\2".match(/\\/) ); // '\'6, nhưng cần phải thực hiện một số trốn thoát khác.
Ví dụ, hãy xem xét điều này:
let regexp = new RegExp("\d\.\d"); alert( "Chapter 5.1".match(regexp) ); // null
Tìm kiếm tương tự trong một trong những ví dụ trước đã làm việc với alert( "1\\2".match(/\\/) ); // '\'7, nhưng alert( "1\\2".match(/\\/) ); // '\'8 không hoạt động, tại sao?
Lý do là các dấu gạch chéo ngược được tiêu thụ bởi một chuỗi. Như chúng ta có thể nhớ lại, các chuỗi thông thường có các nhân vật đặc biệt của riêng họ, chẳng hạn như alert( "1\\2".match(/\\/) ); // '\'9 và một dấu gạch chéo ngược được sử dụng để trốn thoát.
Ở đây, cách thức, cách thức của \ d.
Chuỗi trích dẫn của người Hồi giáo tiêu thụ dấu vết chéo ngược và tự giải thích chúng, ví dụ:
- alert( "1\\2".match(/\\/) ); // '\'9 - trở thành một nhân vật mới,
- alert( "/".match(/\//) ); // '/'1 - trở thành ký tự Unicode với mã đó,
- Và khi không có ý nghĩa đặc biệt: như alert( "function g()".match(/g\(\)/) ); // "g()"4 hoặc alert( "/".match(/\//) ); // '/'3, thì dấu gạch chéo ngược được loại bỏ đơn giản.
Vì vậy, alert( "1\\2".match(/\\/) ); // '\'4 có một chuỗi mà không có dấu gạch chéo ngược. Đó là lý do tại sao việc tìm kiếm không hoạt động!
Để sửa nó, chúng ta cần tăng gấp đôi các dấu gạch chéo ngược, vì trích dẫn chuỗi biến alert( "/".match(/\//) ); // '/'5 thành alert( "function g()".match(/g\(\)/) ); // "g()"3:
let regStr = "\\d\\.\\d"; alert(regStr); // \d\.\d (correct now) let regexp = new RegExp(regStr); alert( "Chapter 5.1".match(regexp) ); // 5.1
Bản tóm tắt
- Để tìm kiếm các nhân vật đặc biệt alert( "/".match(/\//) ); // '/'7 theo nghĩa đen, chúng ta cần chuẩn bị cho họ bằng một dấu gạch chéo ngược alert( "function g()".match(/g\(\)/) ); // "g()"3 (Escape Escape họ).
- Chúng ta cũng cần thoát alert( "1\\2".match(/\\/) ); // '\'6 nếu chúng ta ở bên trong alert( "1\\2".match(/\\/) ); // '\'3 (nhưng không phải bên trong alert( "1\\2".match(/\\/) ); // '\'4).
- Khi chuyển một chuỗi cho alert( "1\\2".match(/\\/) ); // '\'4, chúng ta cần tăng gấp đôi so với alert( "/".match(/\//) ); // '/'5, gây ra trích dẫn chuỗi tiêu thụ một trong số chúng.