'use strict'; var $ = require('../internals/export'); var uncurryThis = require('../internals/function-uncurry-this'); var toString = require('../internals/to-string'); var fromCharCode = String.fromCharCode; var charAt = uncurryThis(''.charAt); var exec = uncurryThis(/./.exec); var stringSlice = uncurryThis(''.slice); var hex2 = /^[\da-f]{2}$/i; var hex4 = /^[\da-f]{4}$/i; // `unescape` method // https://tc39.es/ecma262/#sec-unescape-string $({ global: true }, { unescape: function unescape(string) { var str = toString(string); var result = ''; var length = str.length; var index = 0; var chr, part; while (index < length) { chr = charAt(str, index++); if (chr === '%') { if (charAt(str, index) === 'u') { part = stringSlice(str, index + 1, index + 5); if (exec(hex4, part)) { result += fromCharCode(parseInt(part, 16)); index += 5; continue; } } else { part = stringSlice(str, index, index + 2); if (exec(hex2, part)) { result += fromCharCode(parseInt(part, 16)); index += 2; continue; } } } result += chr; } return result; } });