我有一个网址,如下所示:
http://google.com/foo/querty?act=potato
http://google.com/foo/querty/?act=potato
http://google.com/foo/querty/#/21312ads
http://google.com/foo/querty#/1230982130asd
对于这种 URL 格式,我如何才能通过在 javascript 中使用正则表达式来仅获取“查询”字符串?
我有一个网址,如下所示:
http://google.com/foo/querty?act=potato
http://google.com/foo/querty/?act=potato
http://google.com/foo/querty/#/21312ads
http://google.com/foo/querty#/1230982130asd
对于这种 URL 格式,我如何才能通过在 javascript 中使用正则表达式来仅获取“查询”字符串?
要将 URL 与“?”匹配:
str.match(/^.*\/([^\/]+)\/?\?.*$/)[1];
用“#”匹配 URL:
str.match(/^.*\/([^\/]+)\/?#.*$/)[1];
匹配两者:
str.match(/^.*\/([^\/]+)\/?[#\?].*$/)[1];
我建议:
var url = "http://google.com/foo/querty?act=potato".split('/').pop(),
urlPart = url.slice(0,url.indexOf('?'));
console.log(urlPart);
考虑到不必要的复杂性(但这当然是个人喜好),我强烈建议不要为此使用正则表达式。
编辑以解决上述问题未能满足问题中显示的两个测试用例(在第二种情况下失败)。以下处理指定的两种情况:
Object.prototype.lastStringBefore = function (char, delim) {
if (!char) {
return this;
}
else {
delim = delim || '/';
var str = this,
index = str.indexOf(char),
part = str.charAt(index - 1) == delim ? str.split(delim).slice(-2, -1) : str.split(delim).pop();
return part.length === 1 ? part[0] : part.slice(0, part.indexOf(char));
}
}
var url1 = 'http://google.com/foo/querty?act=potato',
url2 = 'http://google.com/foo/querty/?act=potato',
lastWord1 = url1.lastStringBefore('?', '/'),
lastWord2 = url2.lastStringBefore('?', '/');
console.log(lastWord1, lastWord2);
参考:
使用lastIndexOf查找?
和substr以提取部分字符串:
url.substr(url.lastIndexOf('?'));