es.unescape.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. 'use strict';
  2. var $ = require('../internals/export');
  3. var toString = require('../internals/to-string');
  4. var fromCharCode = String.fromCharCode;
  5. var hex2 = /^[\da-f]{2}$/i;
  6. var hex4 = /^[\da-f]{4}$/i;
  7. // `unescape` method
  8. // https://tc39.es/ecma262/#sec-unescape-string
  9. $({ global: true }, {
  10. unescape: function unescape(string) {
  11. var str = toString(string);
  12. var result = '';
  13. var length = str.length;
  14. var index = 0;
  15. var chr, slice;
  16. while (index < length) {
  17. chr = str.charAt(index++);
  18. if (chr === '%') {
  19. if (str.charAt(index) === 'u') {
  20. slice = str.slice(index + 1, index + 5);
  21. if (hex4.test(slice)) {
  22. result += fromCharCode(parseInt(slice, 16));
  23. index += 5;
  24. continue;
  25. }
  26. } else {
  27. slice = str.slice(index, index + 2);
  28. if (hex2.test(slice)) {
  29. result += fromCharCode(parseInt(slice, 16));
  30. index += 2;
  31. continue;
  32. }
  33. }
  34. }
  35. result += chr;
  36. } return result;
  37. }
  38. });