在最后的“斜线”和第一个“审讯标记”之间获取字符串

时间:2013-04-11 17:41:31

标签: 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

如何通过在javascript中使用regex获取此格式的URL来获取“querty”字符串?

3 个答案:

答案 0 :(得分:1)

将网址与“?”匹配:

str.match(/^.*\/([^\/]+)\/?\?.*$/)[1];

将网址与“#”匹配:

str.match(/^.*\/([^\/]+)\/?#.*$/)[1];

匹配两者:

str.match(/^.*\/([^\/]+)\/?[#\?].*$/)[1];

答案 1 :(得分: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);

JS Fiddle demo

参考文献:

答案 2 :(得分:0)

使用lastIndexOf查找?substr以提取字符串的一部分:

url.substr(url.lastIndexOf('?'));