regex und replace

k3nguruh

Erfahrenes Mitglied
Hallo,

ich möchte gerne bei einer URL etwas ersetzen bzw. wenn es nicht vorhanden ist anhängen. Ich habe da auch was "gebastelt", möchte aber gerne wissen ob es vll besser / einfacher geht.

Ich hoffe das mein Anliegen aus dem Code hervorgeht.

Javascript:
// window.location.href = "http://localhost/index.php?contents=pages/test
// window.location.href = "http://localhost/index.php?contents=pages/test&page=5

_buildLink: function (page) {
    let location = window.location.href;
    let regexp = /^(.*(?:\?|&)page=)(\d*)(&?.*)$/;

    if (location.match(regexp)) {
        return location.replace(regexp, `\$1${page}\$3`);
     }

    return `${location + (location.search(/\?/) !== -1 ? "&" : "?")}page=${page}`;
},
 

k3nguruh

Erfahrenes Mitglied
Hallo,

Sorry, Dann war es wohl doch nicht so ersichtlich.

Also bei der ersten URL soll zum Bsp. page=5 angehangen werden.
Bei der 2. soll aus page=5 zum Bsp. page=6 werden.
Das alles soll für eine Pagenavigation sein.

Ich hoffe dass es jetzt verständlich ist.
 

Sempervivum

Erfahrenes Mitglied
Ich würde das so aufziehen: Erst den URL-Parameter entfernen und dann mit dem neuen Wert hinzu fügen, dann ist es ein Einzeiler:
Code:
        const _buildLink = function (page, location) {
            // const location = window.location.href;
            const modLocation = location.replace(/&page=\d+$/, '') + '&page=' + page;
            return modLocation;
        }
        console.log(_buildLink(124, 'http://localhost/index.php?contents=pages/test'));
        console.log(_buildLink(248, 'http://localhost/index.php?contents=pages/test&page=5'));
 

Sempervivum

Erfahrenes Mitglied
Es wird dadurch zwar nicht kürzer aber übersichtlicher wenn man das URLSearchParams verwendet, das Javascript für die Arbeit mit URL-Parametern bereit stellt:
Code:
        const _buildLink = function (page) {
            const
                urlParams = new URLSearchParams(window.location.search),
                url = new URL(window.location.href);
            urlParams.delete('page');
            urlParams.append('page', page);
            url.search = urlParams;
            return url.toString();
        }
 

k3nguruh

Erfahrenes Mitglied
Hallo,

ich habe noch eine kleine Änderung vorgenommen. Wenn man "set" benutzt, ersparrt man sich das "delete" und anschliessende "append"

Javascript:
_getLocation: function (page) {
      let location = new URL(window.location.href);
      let params = new URLSearchParams(location.search);
    
      params.set('page', page);
      location.search = params;
    
      return location.toString();
},
 
Zuletzt bearbeitet: