为什么我要检索的URL参数没有完全显示?

B4b*_*4j1 6 javascript url-parameters

我正在跟踪带有“ posName”参数的网址,例如:

example.com?posName= Content +&+ Community + Manager +(H / F)

但是我的代码仅返回“内容”

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

Run Code Online (Sandbox Code Playgroud)

如何获得完整的参数?

编辑: 我有另一个网址,如:

exemple.com?posName= Club +&+ Animator +(H / F)

然后代码返回完整的参数...那么导致此问题的参数长度是吗?

Blu*_*r86 5

我已经修改了您的函数以接受URI作为参数。您需要先对参数进行编码,然后再将其附加到查询字符串(我们在此处看不到此代码)。您的函数中也不需要解码URIComponent。

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))
Run Code Online (Sandbox Code Playgroud)


cha*_*oir 1

如果由于某种原因您无法控制 中的内容window.location.href,您可以通过正则表达式轻松解决此问题:

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)
Run Code Online (Sandbox Code Playgroud)

正则表达式解释:

(?=postName=)Lookbehind 寻找postName=开始比赛

(.+?)匹配以下先行模式之前的任何内容

(?=\&\w+?\=|$)loohahead 模式用于文字&,后跟从 1 开始的任意长度的一些文本,\w+?后跟=. 所有这些,或者我们位于输入字符串的末尾,由$

更新

正则表达式lookbehind相对较新。如果浏览器或应用程序不支持正则表达式lookbehind(例如当前的Google跟踪代码管理器),请尝试以下解决方法:

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)
Run Code Online (Sandbox Code Playgroud)