Mettre à jour uri hash javascript

J’ai du mal à croire que cela ne soit pas demandé, mais je ne trouve aucune référence nulle part. J’ai besoin d’append un fragment de hachage URI et de mettre à jour la valeur si elle est déjà dans le hachage. Je peux actuellement le faire append le hash, mais mon expression régulière ne semble pas intercepter si elle existe, alors elle en ajoute une autre au lieu de la mettre à jour.

setQuerySsortingng : function() { var value = currentPage; var uri = window.location.hash; var key = "page"; var re = new RegExp("([#&])" + key + "=.*#(&|$)", "i"); var separator = uri.indexOf('#') !== -1 ? "&" : "#"; if (uri.match(re)) { return uri.replace(re, '$1' + key + "=" + value + '$2'); } else { return uri + separator + key + "=" + value; } }, 

En outre, si cela peut être fait, nettoyez tout en préservant les autres valeurs / hachages d’URL.

exemple d’entrée comme demandé

Valeur uri de départ: www.example.com # page = 1 (ou pas de # page du tout)

puis, en cliquant sur “page suivante”, setQuerySsortingng est appelée pour que les valeurs soient égales à:

 var value = 2; var uri = '#page1' var key = 'page' 

Donc, la sortie pleine d’espoir serait ‘# page2’.

En ce qui concerne votre question regex, tester si le motif #page=(number) ou &page=(number) est présent, combiné à la capture du nombre, peut être fait avec la regex /[#&]page\=(\d*)/ et la .match(regex) . Notez que = besoin de s’échapper dans les expressions rationnelles.

Si le modèle existe dans la chaîne, result contiendra un tableau avec l’entier (sous forme de chaîne) au result[1] . Si le motif n’existe pas, le result sera null .

 //match #page=(integer) or &page=(integer) var test = "#foo=bar&page=1"; var regex = /[#&]page\=(\d*)/; var result = test.match(regex); console.log(result);