web-dev-qa-db-fra.com

Analyser une URL en JavaScript

Comment analyser une URL avec JavaScript (également avec jQuery)?

Par exemple, j'ai ceci dans ma chaîne,

url = "http://example.com/form_image_edit.php?img_id=33"

Je veux obtenir la valeur de img_id

Je sais que je peux le faire facilement avec PHP avec parse_url()] _, mais je veux savoir comment cela est possible avec JavaScript.

76
laukok

Vous pouvez utiliser une astuce pour créer un élément a-, y ajouter l'URL puis utiliser son objet Location .

function parseUrl( url ) {
    var a = document.createElement('a');
    a.href = url;
    return a;
}

parseUrl('http://example.com/form_image_edit.php?img_id=33').search

Quel sera le résultat: ?img_id=33


Vous pouvez également utiliser php.js pour obtenir la fonction fonction parse_url en JavaScript .


Mise à jour (2012-07-05)

Je recommanderais d'utiliser l'excellente bibliothèque RI.js si vous avez besoin de faire autre chose que de gérer des URL très simples.

119
Sindre Sorhus

Si votre chaîne s'appelle s alors

var id = s.match(/img_id=([^&]+)/)[1]

va vous le donner.

35
Ray Toal

Essaye ça:

var url = window.location;
var urlAux = url.split('=');
var img_id = urlAux[1]
10
mdaguerre

Bon plugin existant jQuery Purl (un analyseur d'URL JavaScript) . Cet utilitaire peut être utilisé de deux manières: avec jQuery ou sans ...

6
A. Masson

Bon mot:

location.search.replace('?','').split('&').reduce(function(s,c){var t=c.split('=');s[t[0]]=t[1];return s;},{})
5
Ilya Kharlamov

obtenu de google, essayez d'utiliser cette méthode

function getQuerystring2(key, default_) 
{ 
    if (default_==null) 
    { 
        default_=""; 
    } 
    var search = unescape(location.search); 
    if (search == "") 
    { 
        return default_; 
    } 
    search = search.substr(1); 
    var params = search.split("&"); 
    for (var i = 0; i < params.length; i++) 
    { 
        var pairs = params[i].split("="); 
        if(pairs[0] == key) 
        { 
            return pairs[1]; 
        } 
    } 


return default_; 
}
5
kobe

Cela devrait corriger quelques cas Edge dans la réponse de Kobe:

function getQueryParam(url, key) {
  var queryStartPos = url.indexOf('?');
  if (queryStartPos === -1) {
    return;
  }
  var params = url.substring(queryStartPos + 1).split('&');
  for (var i = 0; i < params.length; i++) {
    var pairs = params[i].split('=');
    if (decodeURIComponent(pairs.shift()) == key) {
      return decodeURIComponent(pairs.join('='));
    }
  }
}

getQueryParam('http://example.com/form_image_edit.php?img_id=33', 'img_id');
// outputs "33"
3
michielbdejong

J'ai écrit une bibliothèque d'analyse javascript, RL.js , vous pouvez l'utiliser pour cela.

Exemple:

url.parse("http://mysite.com/form_image_edit.php?img_id=33").get.img_id === "33"
2
Kevin Cox

Quelque chose comme ça devrait marcher pour vous. Même s'il existe plusieurs valeurs de chaîne de requête, cette fonction doit renvoyer la valeur de la clé souhaitée.

function getQSValue(url) 
{
    key = 'img_id';
    query_string = url.split('?');
    string_values = query_string[1].split('&');
    for(i=0;  i < string_values.length; i++)
    {
        if( string_values[i].match(key))
            req_value = string_values[i].split('=');    
    }
    return req_value[1];
}
2
Mittal Patel
function parse_url(str, component) {
  //       discuss at: http://phpjs.org/functions/parse_url/
  //      original by: Steven Levithan (http://blog.stevenlevithan.com)
  // reimplemented by: Brett Zamir (http://brett-zamir.me)
  //         input by: Lorenzo Pisani
  //         input by: Tony
  //      improved by: Brett Zamir (http://brett-zamir.me)
  //             note: original by http://stevenlevithan.com/demo/parseuri/js/assets/parseuri.js
  //             note: blog post at http://blog.stevenlevithan.com/archives/parseuri
  //             note: demo at http://stevenlevithan.com/demo/parseuri/js/assets/parseuri.js
  //             note: Does not replace invalid characters with '_' as in PHP, nor does it return false with
  //             note: a seriously malformed URL.
  //             note: Besides function name, is essentially the same as parseUri as well as our allowing
  //             note: an extra slash after the scheme/protocol (to allow file:/// as in PHP)
  //        example 1: parse_url('http://username:password@hostname/path?arg=value#anchor');
  //        returns 1: {scheme: 'http', Host: 'hostname', user: 'username', pass: 'password', path: '/path', query: 'arg=value', fragment: 'anchor'}

  var query, key = ['source', 'scheme', 'authority', 'userInfo', 'user', 'pass', 'Host', 'port',
      'relative', 'path', 'directory', 'file', 'query', 'fragment'
    ],
    ini = (this.php_js && this.php_js.ini) || {},
    mode = (ini['phpjs.parse_url.mode'] &&
      ini['phpjs.parse_url.mode'].local_value) || 'php',
    parser = {
      php: /^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
      strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
      loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/\/?)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // Added one optional slash to post-scheme to catch file:/// (should restrict this)
    };

  var m = parser[mode].exec(str),
    uri = {},
    i = 14;
  while (i--) {
    if (m[i]) {
      uri[key[i]] = m[i];
    }
  }

  if (component) {
    return uri[component.replace('PHP_URL_', '')
      .toLowerCase()];
  }
  if (mode !== 'php') {
    var name = (ini['phpjs.parse_url.queryKey'] &&
      ini['phpjs.parse_url.queryKey'].local_value) || 'queryKey';
    parser = /(?:^|&)([^&=]*)=?([^&]*)/g;
    uri[name] = {};
    query = uri[key[12]] || '';
    query.replace(parser, function($0, $1, $2) {
      if ($1) {
        uri[name][$1] = $2;
      }
    });
  }
  delete uri.source;
  return uri;
}

référence

1
Muhammad Tahir

Vous pouvez utiliser le plugin jquery http://plugins.jquery.com/url . $.url("?img_id") retournera 33

1
Md. Afsar Uddin
var url = window.location;
var urlAux = url.split('=');
var img_id = urlAux[1]

Travaillé pour moi Mais la première var doit être var url = window.location.href

1
Andrei G.

Les travailleurs Web fournissent un utilitaire URL pour l'analyse de l'URL.

0
fxp