Javascript 使用自定义JS提取URL路径的最后一部分-但不使用添加的参数?

Javascript 使用自定义JS提取URL路径的最后一部分-但不使用添加的参数?,javascript,google-tag-manager,Javascript,Google Tag Manager,我试图提取要在GTM中跟踪的URL的最后一部分,但不包括添加的参数,如“.gclid=…”。 例如: 我只想提取5f5a0a9472cf844b320b6136。 到目前为止,我使用了: function() { var pageUrl = window.location.href; return pageUrl.split("/")[pageUrl.split("/").length - 1]; } 但这给了我gclid号码。这个问题是,该参数只存在于

我试图提取要在GTM中跟踪的URL的最后一部分,但不包括添加的参数,如“.gclid=…”。 例如: 我只想提取5f5a0a9472cf844b320b6136。 到目前为止,我使用了:

function() {
var pageUrl = window.location.href;
return pageUrl.split("/")[pageUrl.split("/").length - 1];
}
但这给了我gclid号码。这个问题是,该参数只存在于登录页上,而不存在于后续页上。 因此,如果我使用
length-2]
,那么一旦他们离开登录页,这将不起作用。它将返回/m/。
如何转义登录页上的“?”字符串?

您可以执行类似的操作,这将更容易

function (){
  paths = window.location.pathname.split("/")
  return paths[paths.length-1]
}
也许这会有帮助

const strs=[
"https://example.com/5f5a0a9472cf844b320b6136/?gclid=1234/",
"https://example.com/m/5f5a0a9472cf844b320b6136/?gclid=1234/",
"https://example.com/m/n/5f5a0a9472cf844b320b6136/",
"https://example.com/m/n/5f5a0a9472cf844b320b6136",
];
标准forEach((str)=>{
// ********************
if(str.includes(“?”){
const parts=str.split(“/?”[0]。split(“/”);
console.log(parts[parts.length-1]);
}否则{
const lastChar=str.charAt(str.length-1);
str=lastChar===“/”?str.substring(0,str.length-1):str;
const parts=str.split(“/”);
console.log(parts[parts.length-1]);
}
// ********************

});由于您正在使用GTM,请启用并使用内置的“page path”变量,该变量不包括参数:

function() {
    return {{Page Path}}.split("/").pop();
}

pop()
返回数组中的最后一个元素(它也会从数组中删除它,在本例中这并不重要)。

好的,我找到了一个我想与大家分享的替代解决方案。因为变量字符串的总数总是24个字符,所以我创建了一个函数来查找它

    function getQuoteId() {
    var segments = window.location.pathname.split('/');
    for (var i = segments.length - 1; i >= 0; i--) {
        if (segments[i] && segments[i].length === 24) {
            return segments[i];
        }
    }
    return null;
}

这减少了尾随“/”以及添加的参数,并返回了我想要隔离的路径。

感谢所有建议。我发现了各种各样的成功,我想我明白为什么。首先是澄清。登录页是会话唯一的动态编号(5f5a0…6136)。所以每次访问都不一样。其次,登录页后面有一个斜杠。这会在第一页中去掉
pop()
length-1
,但是代码会在后面没有斜杠的页面上工作。我认为pathname选项可以工作,但需要考虑尾部斜杠。