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);