为什么我要取回的URL参数显示不全?
Why is the URL parameter I want to retrieve not fully displayed?
我正在使用 "posName" 参数跟踪 URLs,例如:
example.com?posName=内容+&+社区+经理+(H/F)
但是我的代码 returns "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;
}
如何获取完整参数?
编辑:
我还有一个 URL 比如:
exemple.com?posName=俱乐部+&+动画师+(H/F)
而代码 returns 是完整的参数...所以是 length 参数导致了这个问题吗?
我已经修改了您的函数以接受 URI 作为参数。您需要在将参数附加到查询字符串之前对其进行编码(我们在这里看不到这段代码)。您函数中的 decodeURIComponent 也不是必需的。
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))
如果由于某种原因您无法控制 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=)
lookbehind to find postName=
to start the match
(.+?)
matches anything up to the lookahead pattern below
(?=\&\w+?\=|$)
loohahead pattern for literal &
followed by some text of any length from 1 onwards \w+?
followed by =
. All that, or we're at the end of the input string, denoted by $
更新
正则表达式回顾相对是新的。如果浏览器或应用程序不支持正则表达式回顾(例如,目前 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)
我正在使用 "posName" 参数跟踪 URLs,例如:
example.com?posName=内容+&+社区+经理+(H/F)
但是我的代码 returns "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;
}
如何获取完整参数?
编辑: 我还有一个 URL 比如:
exemple.com?posName=俱乐部+&+动画师+(H/F)
而代码 returns 是完整的参数...所以是 length 参数导致了这个问题吗?
我已经修改了您的函数以接受 URI 作为参数。您需要在将参数附加到查询字符串之前对其进行编码(我们在这里看不到这段代码)。您函数中的 decodeURIComponent 也不是必需的。
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))
如果由于某种原因您无法控制 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=)
lookbehind to findpostName=
to start the match
(.+?)
matches anything up to the lookahead pattern below
(?=\&\w+?\=|$)
loohahead pattern for literal&
followed by some text of any length from 1 onwards\w+?
followed by=
. All that, or we're at the end of the input string, denoted by$
更新
正则表达式回顾相对是新的。如果浏览器或应用程序不支持正则表达式回顾(例如,目前 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)