ОБНОВЛЕНИЕ : обратите внимание, что это решение, которое должно применяться к более старым браузерам или небраузерным платформам, и поддерживается в учебных целях. Пожалуйста, обратитесь к ответу @radicand ниже, чтобы получить более свежий ответ.
Это экранированная строка в кодировке Unicode. Сначала строка была экранирована, а затем закодирована с помощью Unicode. Чтобы вернуться к нормальному состоянию:
var x = "http\\u00253A\\u00252F\\u00252Fexample.com";
var r = /\\u([\d\w]{4})/gi;
x = x.replace(r, function (match, grp) {
return String.fromCharCode(parseInt(grp, 16)); } );
console.log(x);
x = unescape(x);
console.log(x);
Чтобы объяснить: я ищу регулярное выражение \u0025
. Однако, так как мне нужно только часть этой строки для моей замены операции, я использую круглые скобки , чтобы изолировать часть я собираюсь повторного использования 0025
. Эта изолированная часть называется группой.
gi
Часть в конце выражения обозначает оно должно соответствовать всем экземплярам в строке, а не только первый из них, и что согласование должно быть чувствительно к регистру. Это может показаться ненужным на примере, но добавляет универсальности.
Теперь, чтобы преобразовать одну строку в другую, мне нужно выполнить несколько шагов для каждой группы каждого совпадения, и я не могу сделать это, просто преобразовав строку. К счастью, операция String.replace может принимать функцию, которая будет выполняться для каждого совпадения. Возврат этой функции заменит само совпадение в строке.
Я использую второй параметр, который принимает эта функция, то есть группу, которую мне нужно использовать, и преобразовываю его в эквивалентную последовательность utf-8, а затем использую встроенную unescape
функцию для декодирования строки в ее правильную форму.