我想从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值?
谢谢
答案 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.startsWith和String.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;
};