ОНОВЛЕННЯ : Будь ласка, зверніть увагу, що це рішення, яке має застосовуватися до старих браузерів або не браузерних платформ, і воно залишається в живих для навчальних цілей. Будь ласка, зверніться до відповіді @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);
x = unescape(x);
console.log(x);
Пояснити: я використовую регулярний вираз для пошуку \u0025
. Однак, так як мені потрібно тільки частина цього рядка для моєї заміни операції, я використовую круглі дужки , щоб ізолювати частину я збираюся повторного використання 0025
. Ця ізольована частина називається групою.
gi
Частина в кінці виразу позначає воно повинно відповідати всім екземплярам в рядку, а не тільки перший з них, і що узгодження має бути чутливим до регістру. На прикладі це може здатися непотрібним, але це додає універсальності.
Тепер, щоб перетворити з одного рядка в наступний, мені потрібно виконати кілька кроків у кожній групі кожного збігу, і я не можу цього зробити, просто перетворивши рядок. Корисно, операція String.replace може прийняти функцію, яка буде виконуватися для кожного збігу. Повернення цієї функції замінить саму відповідність у рядку.
Я використовую другий параметр, який ця функція приймає, тобто групу, яку мені потрібно використовувати, і перетворюю її на еквівалентну послідовність utf-8, а потім використовую вбудовану unescape
функцію для декодування рядка у належний вигляд.