Попытка использовать .split с двумя различными структурами URL страницы - PullRequest
1 голос
/ 10 марта 2020

Мое намерение
вытащить код языка из двух типов 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/# / ru / ........

Примечание
In Я хочу, чтобы оба примера были в состоянии успешно извлечь ru .

Ответы [ 4 ]

3 голосов
/ 10 марта 2020

Любое решение здесь, вероятно, будет fr agile, у вас может быть 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/........"));
2 голосов
/ 10 марта 2020

Мы можем вывести код языка, просто разделив 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-му индексу (1-й пример), либо по 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);
0 голосов
/ 10 марта 2020
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);
0 голосов
/ 10 марта 2020
// 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...