es.unescape.js
1.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
'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;
}
});