url.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // https://github.com/kevva/url-regex/blob/master/index.js
  2. var urlReg;
  3. export default (function () {
  4. if (urlReg) {
  5. return urlReg;
  6. }
  7. var word = '[a-fA-F\\d:]';
  8. var b = function b(options) {
  9. return options && options.includeBoundaries ? "(?:(?<=\\s|^)(?=".concat(word, ")|(?<=").concat(word, ")(?=\\s|$))") : '';
  10. };
  11. var v4 = '(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}';
  12. var v6seg = '[a-fA-F\\d]{1,4}';
  13. var v6List = ["(?:".concat(v6seg, ":){7}(?:").concat(v6seg, "|:)"), // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
  14. "(?:".concat(v6seg, ":){6}(?:").concat(v4, "|:").concat(v6seg, "|:)"), // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::
  15. "(?:".concat(v6seg, ":){5}(?::").concat(v4, "|(?::").concat(v6seg, "){1,2}|:)"), // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::
  16. "(?:".concat(v6seg, ":){4}(?:(?::").concat(v6seg, "){0,1}:").concat(v4, "|(?::").concat(v6seg, "){1,3}|:)"), // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::
  17. "(?:".concat(v6seg, ":){3}(?:(?::").concat(v6seg, "){0,2}:").concat(v4, "|(?::").concat(v6seg, "){1,4}|:)"), // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::
  18. "(?:".concat(v6seg, ":){2}(?:(?::").concat(v6seg, "){0,3}:").concat(v4, "|(?::").concat(v6seg, "){1,5}|:)"), // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::
  19. "(?:".concat(v6seg, ":){1}(?:(?::").concat(v6seg, "){0,4}:").concat(v4, "|(?::").concat(v6seg, "){1,6}|:)"), // 1:: 1::3:4:5:6:7:8 1::8 1::
  20. "(?::(?:(?::".concat(v6seg, "){0,5}:").concat(v4, "|(?::").concat(v6seg, "){1,7}|:))") // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::
  21. ];
  22. var v6Eth0 = "(?:%[0-9a-zA-Z]{1,})?"; // %eth0 %1
  23. var v6 = "(?:".concat(v6List.join('|'), ")").concat(v6Eth0);
  24. // Pre-compile only the exact regexes because adding a global flag make regexes stateful
  25. var v46Exact = new RegExp("(?:^".concat(v4, "$)|(?:^").concat(v6, "$)"));
  26. var v4exact = new RegExp("^".concat(v4, "$"));
  27. var v6exact = new RegExp("^".concat(v6, "$"));
  28. var ip = function ip(options) {
  29. return options && options.exact ? v46Exact : new RegExp("(?:".concat(b(options)).concat(v4).concat(b(options), ")|(?:").concat(b(options)).concat(v6).concat(b(options), ")"), 'g');
  30. };
  31. ip.v4 = function (options) {
  32. return options && options.exact ? v4exact : new RegExp("".concat(b(options)).concat(v4).concat(b(options)), 'g');
  33. };
  34. ip.v6 = function (options) {
  35. return options && options.exact ? v6exact : new RegExp("".concat(b(options)).concat(v6).concat(b(options)), 'g');
  36. };
  37. var protocol = "(?:(?:[a-z]+:)?//)";
  38. var auth = '(?:\\S+(?::\\S*)?@)?';
  39. var ipv4 = ip.v4().source;
  40. var ipv6 = ip.v6().source;
  41. var host = "(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)";
  42. var domain = "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*";
  43. var tld = "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))";
  44. var port = '(?::\\d{2,5})?';
  45. var path = '(?:[/?#][^\\s"]*)?';
  46. var regex = "(?:".concat(protocol, "|www\\.)").concat(auth, "(?:localhost|").concat(ipv4, "|").concat(ipv6, "|").concat(host).concat(domain).concat(tld, ")").concat(port).concat(path);
  47. urlReg = new RegExp("(?:^".concat(regex, "$)"), 'i');
  48. return urlReg;
  49. });