You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.2 KiB
45 lines
1.2 KiB
'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; |
|
} |
|
});
|
|
|