получить значение из строки URL в JavaScript с помощью регулярного выражения - PullRequest
0 голосов
/ 24 июня 2019

Я хотел бы получить конкретные значения фруктов из строки URL в JavaScript. Фрукты, которые я хотел бы получить, это яблоко, груша, белая груша, банан и банановая Бразилия.

Значение из URL, которое я должен получить:

www.ourfruit.net/fruit/apple_is_healthy.html (value: apple)
www.ourfruit.net/fruit/pear_is_healthy.html (value: pear)
www.ourfruit.net/fruit_offer/white_pear_discount.html (value: white-pear)
www.ourfruit.net/fruit_offer/banana_love.html (value: banana)
www.ourfruit.net/fruit_export/banana_brazil_export.html (value: banana-brazil)

Значение из URL, которое я не должен получить:

www.ourfruit.net/fruit/red_apple_is_healthy.html

www.ourfruit.net/fruit_offer/green_banana_love.html

www.ourfruit.net/fruit_export/banana_brazil_yellow_quality_export.html

Моя попытка на основе этого решения Регулярное выражение для поиска двух строк в любом месте ввода равно

function findFruits() {
    var url_path = window.location.pathname;
    var url_path = url_path.replace(/\//g, "_");
    var url_path = url_path.replace("_", "");
    var url_path = url_path.replace("_index.html", "");
    if (-1 !== url_path.match(/^.*apple.*$/)) theFruit = "fruit_apple";
    if (-1 !== url_path.match(/^.*pear.*$/)) theFruit = "fruit_pear";
    if (-1 !== url_path.match(/^.*white.*pear.*$/)) theFruit = "fruit_white_pear";
    if (-1 !== url_path.match(/^.*banana.*$/)) theFruit = "fruit_banana";
    if (-1 !== url_path.match(/^.*banana.*brazil.*$/)) theFruit = "fruit_banana_brazil";
    tagData.tagValue.push({ 
            "tags": [{ "tag": "FRUIT_POPULATE", "value": theFruit }], 
            "isEvent": true, 
            "isTargeting": true })
    }
jQuery(document).ready(function() { 
    findFruits(); 
});

Это работает. Проблема даже в том, что на другой странице консоль показывает результат только в последнем операторе if. Так что в этом случае результат FRUIT_POPULATE: fruit_banana_brazil. Если я изменю позицию последнего оператора if на другой результат, консоль все равно покажет значение из последнего оператора if.

Вопрос: Как правильно отобразить значение theFruit из приведенной выше строки URL?

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

var getParams = function (url) {
	var params = {};
	var parser = document.createElement('a');
	parser.href = url;
	var query = parser.search.substring(1);
	var vars = query.split('&');
	for (var i = 0; i < vars.length; i++) {
		var pair = vars[i].split('=');
		params[pair[0]] = decodeURIComponent(pair[1]);
	}
	return params;
};
0 голосов
/ 24 июня 2019

String.prototype.match() возвращает null, если не соответствует заданному регулярному выражению, а -1 !== null всегда имеет значение true.Попробуйте сравнить с null вместо -1.Кроме того, вы не используете блоки else if, поэтому строка будет проходить через каждый оператор if.


Вы можете сделать это вообще без использования регулярных выражений, поскольку ваши шаблоны не так уж сложны., String.prototype.includes позволяет проверить, имеет ли строка заданную подстроку или нет.

function findFruits() {
  var url = window.location.pathname
  var theFruit = null

  if (url.includes('/apple_')) {
    theFruit = 'fruit_apple'
  } else if (url.includes('/pear_')) {
    theFruit = 'fruit_pear'
  } else if (url.includes('white_pear')) {
    theFruit = 'fruit_white_pear'
  } else if (url.includes('/banana_')) {
    theFruit = 'fruit_banana'
  } else if (url.includes('/banana_brazil_')) {
    theFruit = 'fruit_banana_brazil'
  }

  // ...
}

Если вы хотите сопоставить только те случаи, когда фрукт появляется сразу послесимвол /, затем добавьте это прямо перед фруктами, чтобы соответствующим образом ограничить совпадения.(Обратите внимание, что если вы хотите использовать регулярные выражения, то вам нужно будет экранировать косую черту с обратной косой чертой: /^.*\/apple_.*$/

Также есть String.prototype.startsWith и String.prototype.endsWith для гибкого запроса в строках javascript в зависимости от того, соответствует ли тестовая строка началу или концу вашей строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...