我正在跟踪带有“ posName” 参数的URL,例如:
example.com?posName= 内容+&+社区+经理+(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;
}
如何获取完整参数?
编辑: 我有另一个网址,例如:
exemple.com?posName= 俱乐部+&+ Animator +(H / F)
然后代码返回完整的参数...那么导致该问题的参数的 length 是吗?
答案 0 :(得分:4)
我已经修改了您的函数以接受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))
答案 1 :(得分: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)
正则表达式说明:
(?=postName=)
向后寻找postName=
开始比赛文字
(.+?)
匹配符合以下前瞻模式的所有内容(?=\&\w+?\=|$)
的表示
&
loohahead模式,后跟一些长度从1开始的文本,\w+?
后跟=
。所有这些,或者我们位于输入字符串的末尾,用$
更新
后面的正则表达式是相对新的。如果浏览器或应用不支持后面的正则表达式(例如当前使用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)