尝试将 .split 与两个不同的页面 URL 结构一起使用

Trying to use .split with two different page URL structures

我的意图
从我的两种 URL 字符串

中提取语言代码

我的问题
如何在两个不同的 URL 结构之间进行拆分?我有两个 URL 结构,在下面的代码下作为示例列出。

我的问题
我无法弄清楚我应该如何将两个不同的变量单独或一起拆分为一行 cc =... 使用自定义 javascript 和 Google Tag Manager

代码

function() {
    cc = {{Page Path}}.split("/")[1].toLowerCase();
    cc = {{virtualURL}}.split("/#/")[1].toLowerCase();
    if(cc.length == 2) {
        cc = cc;
    } else {
        cc = 'other';
    }
    return cc;
}

{{Page Path}} 示例 - https://www.example.com/en/.....
{{virtualURL}} 的示例 - https://www.booking.example.com/#/en/........

备注
在这两个示例中,我都希望能够成功拉出 en

这里的任何解决方案都可能是脆弱的,您可以 https://example.com/xy/ 其中 xy 不是语言代码。

但考虑到这一点,并且只允许两个字符的语言代码:

var rexGetLang = /\/([a-z]{2})\//;

function getLang(url) {
  var match = rexGetLang.exec(url);
  return match ? match[1] : "other";
}

console.log(getLang("https://www.example.com/en/....."));
console.log(getLang("https://www.booking.example.com/#/en/........"));

或者如果您想允许 en-GB 等:

var rexGetLang = /\/([a-z]{2}(?:-[A-Z]{2})?)\//;

function getLang(url) {
  var match = rexGetLang.exec(url);
  return match ? match[1] : "other";
}

console.log(getLang("https://www.example.com/en/....."));
console.log(getLang("https://www.booking.example.com/#/en/........"));
console.log(getLang("https://www.booking.example.com/........"));

console.log(getLang("https://www.example.com/en-GB/....."));
console.log(getLang("https://www.booking.example.com/#/en-US/........"));

// Web API for handling URL https://developer.mozilla.org/en-US/docs/Web/API/URL
const url = new URL('https://www.example.com/en/website');

url.hostname;  //  'example.com'
url.port;      //  ''
url.search;    //  ''
url.pathname;  //  '/en/website'
url.protocol;  //  'https:'


// RegEx to see if /en/ exists https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
new RegExp(/\/en\//).test(url.pathname) // true

我们只需将URL除以/即可取出语言代码。让我们看看将示例中给出的两个 URL 拆分后会得到什么:

  1. https://www.example.com/en/ - ["https:", "", "www.example.com", "en", ""]
  2. https://www.booking.example.com/#/en/ - ["https:", "", "www.booking.example.com", "#", "en", ""]

在上面的示例中,我们可以看到语言代码出现在第 3 个索引(第一个示例)或第 4 个索引(第 2 个示例),这可以通过 if 条件来处理。让我们看看如何:

let url = 'https://www.booking.example.com/#/en/';
let urlTokens = url.split('/');
let languageCode = urlTokens[3] === '#' ? urlTokens[4] : urlTokens[3];

console.log(languageCode);
function getLanguage(url) {
    var rgx = /^https:\/\/[^\/]+\/(?:#\/)?([a-z]+)/;    
    var language = url.match(rgx)[1];
    return language;
}

var url = 'https://www.booking.example.com/#/en/';
var language = getLanguage(url);