javascript - Varför visas inte URL-parametern jag vill hämta helt?
Jag spårar URL:er med "posName"-parametrar som:
example.com?posName=Innehålls- & communitychef (H/F)
Men min kod returnerar bara "Content":
function () {
var uri = document.location.href;
var uri_dec = decodeURIComponent(uri);
var url = new URL(uri_dec);
var posName= url.searchParams.get("posName");
return posName;
}
Hur kan jag få hela parametern?
REDIGERA: Jag har en annan URL som:
exemple.com?posName=Club+&+Animator+(H/F)
Och koden returnerar hela parametern... Så är det längden på parametern som orsakar detta problem?
Svar #1
Jag har ändrat din funktion för att ta emot URI:n som ett argument. Du behöver koda parametern innan du lägger till den i frågesträngen (vi kan inte se den här koden här). decodeURIComponent i din funktion är också inte nödvändig.
function getPosName (URI) {
//var uri_dec = decodeURIComponent(uri);
var url = new URL(URI);
var posName = url.searchParams.get("posName");
return posName;
}
console.log("Using your current URI:", getPosName("http://exemple.com?posName=Content+&+Community+Manager+(H/F)"))
const encodedParam = encodeURIComponent("Content & Community Manager (H/F)")
console.log("Encoded Parameter:", encodedParam)
const wellFormedURI = `http://exemple.com?posName=${encodedParam}`
console.log("Well Formed URI:", wellFormedURI)
console.log("Using well formed URI:", getPosName(wellFormedURI))Svar #2
Om du av någon anledning inte har kontroll över vad som finns i window.location.href, kan du lösa detta ganska enkelt med regex:
function getPosName(uri) {
let match = uri.match(/(?<=posName=)(.+?)(?=\&\w+?\=|$)/);
return match[1];
}
console.log(getPosName( "xemple.com?posName=Content+&+Community+Manager+(H/F)")); //Content+&+Community+Manager+(H/F)
console.log(getPosName( "exemple.com?posName=Club+&+Animator+(H/F)")); //Club+&+Animator+(H/F)
console.log(getPosName( "exemple.com?posName=Club+&+Animator+(H/F)&test=1")); // Club+&+Animator+(H/F)Regex förklaring:
(?=postName=)lookbehind för att hittapostName=för att starta matchningen
(.+?)matchar allt fram till lookahead-mönstret nedan
(?=\&\w+?\=|$)lookahead-mönster för bokstavlig&följt av någon text av valfri längd från 1 och uppåt\w+?följt av=. Allt det, eller så är vi i slutet av indatasträngen, betecknat med$
Uppdatering
Regex-lookbehind är relativt nytt. Om webbläsaren eller appen inte stödjer regex-lookbehind (t.ex. Google Tag Manager för närvarande), prova istället denna lösning:
function getPosName(uri) {
let match = uri.match(/posName=(.+?)(?=\&\w+?\=|$)/);
return match[1];
}
console.log(getPosName( "xemple.com?posName=Content+&+Community+Manager+(H/F)")); //Content+&+Community+Manager+(H/F)
console.log(getPosName( "exemple.com?posName=Club+&+Animator+(H/F)")); //Club+&+Animator+(H/F)
console.log(getPosName( "exemple.com?posName=Club+&+Animator+(H/F)&test=1")); // Club+&+Animator+(H/F)