使用正则表达式从JavaScript中的URL字符串获取值

时间:2019-06-24 09:16:52

标签: javascript regex

我想从JavaScript中的URL字符串中获取特定的水果值。 我想得到的水果是苹果,梨,白梨,香蕉和巴西香蕉。

我应该从url获得的值是:

dashenc.c

我不应该从url获得的值是:

int use_rename = proto && !strcmp(proto, "file");
...
if (c->lhls) {
    char *prefetch_url = use_rename ? NULL : os->filename;
    write_hls_media_playlist(os, s, pkt->stream_index, 0, prefetch_url);
}

基于此解决方案Regular expression to find two strings anywhere in input的尝试是

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)

它确实起作用。问题是,即使在另一个页面中,控制台也只在最后的if语句中显示结果。因此,在这种情况下,结果为FRUIT_POPULATE:fruit_banana_brazil。如果我将最后一个if语句的位置更改为另一个结果,则控制台仍会显示最后一个if语句的值。

问题:如何从上面匹配的网址字符串中显示正确的theFruit值?

谢谢

2 个答案:

答案 0 :(得分:0)

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.startsWithString.prototype.endsWith用于根据测试字符串是否匹配字符串的开头或结尾来灵活地查询JavaScript字符串。

答案 1 :(得分:0)

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;
};