text: var parse = require('url').parse
  
  module.exports = function (string) {
    // user/repo#version
    var m = /^([\w-.]+)\/([\w-.]+)((?:#|@).+)?$/.exec(string)
    if (m) return format(m)
  
    string = string.replace('//www.', '//')
    // normalize git@ and https:git@ urls
    string = string.replace(/^git@/, 'https://')
    string = string.replace(/^https:git@/, 'https://')
    string = string.replace('.com:', '.com/')
  
    if (!~string.indexOf('://')) {
      return false
    }
    var url = parse(string)
  
    var path = url.pathname.replace(/\.git$/, '')
  
    // https://www.npmjs.org/doc/json.html#Git-URLs-as-Dependencies
    var m = /^\/([\w-.]+)\/([\w-.]+)$/.exec(path)
    if (m) return m.slice(1, 3).concat((url.hash || '').slice(1))
  
    // archive link
    // https://developer.github.com/v3/repos/contents/#get-archive-link
    var m = /^\/repos\/([\w-.]+)\/([\w-.]+)\/(?:tarball|zipball)(\/.+)?$/.exec(path)
    if (m) return format(m)
  
    // codeload link
    // https://developer.github.com/v3/repos/contents/#response-4
    var m = /^\/([\w-.]+)\/([\w-.]+)\/(?:legacy\.(?:zip|tar\.gz))(\/.+)?$/.exec(path)
    if (m) return format(m)
  
    // tarball link
    // https://github.com/LearnBoost/socket.io-client/blob/master/package.json#L14
    var m = /^\/([\w-]+)\/([\w-.]+)\/archive\/(.+)\.tar\.gz?$/.exec(path)
    if (m) return m.slice(1, 4)
  
    // https://docs.gitlab.com/ce/user/group/subgroups/
    if (~url.host.indexOf('gitlab')) {
      var m = /^\/((?:[\w-.]+\/)+)([\w-.]+)$/.exec(path)
      if (m) {
        m = m.slice(1, 3);
        // remove slash at the end
        m[0] = m[0].slice(0, -1);
        return m.concat((url.hash || '').slice(1));
      }
    }
  
    return false
  }
  
  function format(m) {
    var version = (m[3] || '').slice(1)
    if (/^['"]/.test(version)) version = version.slice(1, -1)
    return [m[1], m[2], version]
  }
  