ОБНОВЛЕНИЕ : Обратите внимание, что это решение должно применяться к более старым браузерам или не браузерным платформам и поддерживается в учебных целях.Пожалуйста, обратитесь к ответу @radicand ниже для более актуального ответа.
Это экранированная строка в юникоде.Сначала строка была экранирована, затем закодирована с помощью 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); // http%3A%2F%2Fexample.com
x = unescape(x);
console.log(x); // http://example.com
Чтобы объяснить: я использую регулярное выражение для поиска \u0025
.Однако, поскольку мне нужна только часть этой строки для операции замены, я использую скобки, чтобы выделить часть, которую я собираюсь использовать, 0025
.Эта изолированная часть называется группой.
Часть gi
в конце выражения обозначает, что она должна соответствовать всем экземплярам строки, а не только первому, и что сопоставление должно быть без учета регистра.Это может показаться ненужным, учитывая пример, но это добавляет универсальность.
Теперь, чтобы преобразовать одну строку в другую, мне нужно выполнить несколько шагов в каждой группе каждого соответствия, и я не могу этого сделатьпросто преобразовав строку.Полезно, что операция String.replace может принимать функцию, которая будет выполняться для каждого совпадения.Возвращение этой функции заменит само совпадение в строке.
Я использую второй параметр, который принимает эта функция, это группа, которую мне нужно использовать, и преобразовываю ее в эквивалентную последовательность utf-8, затем использую встроенную функцию unescape
для декодирования строки вего правильная форма.