正则表达式在可选字符之前获取URL中的字符串

时间:2013-04-23 22:17:59

标签: javascript regex

我的网址格式如下:http://domain.com/space/all/all/FarmAnimals

或者像这样:http://domain.com/space/all/all/FarmAnimals?param=2

我可以使用什么正则表达式在两个实例中返回表达式FarmAnimals?

我正在尝试这个:

var myRegexp = /\.com\/space\/[a-zA-Z0-9]*\/[a-zA-Z0-9]*\/(.*)/;
var match = myRegexp.exec(topURL);
var full = match[1];

但这仅适用于第一个实例,有人可以提供一个如何使用可选的问号关闭来设置此正则表达式的示例吗?

非常感谢!

5 个答案:

答案 0 :(得分:5)

 /[^/?]+(?=\?|$)/

任何非/后跟?或行尾。

答案 1 :(得分:2)

我不会在这里编写自己的正则表达式,让Path类处理它(如果这是你的两种字符串格式)。

string url = "http://domain.com/space/all/all/FarmAnimals";

//ensure the last character is not a '/' otherwise `GetFileName` will be empty
if (url.Last() == '/') url = url.Remove(url.Length - 1);

//get the filename (anything from FarmAnimals onwards)
string parsed = Path.GetFileName(url);

//if there's a '?' then only get the string up to the '?' character
if (parsed.IndexOf('?') != -1) 
    parsed = parsed.Split('?')[0];

答案 2 :(得分:1)

您可以使用以下内容:

var splitBySlash = topURL.split('/')
var splitByQ = splitBySlash[splitBySlash.length - 1].split('?')
alert(splitByQ[0])

说明:

splitBySlash将为['http:','','domain.com', ... ,'all','FarmAnimals?param=2']

然后splitByQ将获取该数组中的最后一项,然后将其?拆分为['FarmAnimas','param=2']

然后抓住第一个元素。

答案 3 :(得分:1)

.*\/(.*?)(\?.*)?$

应该捕获您要查找的字符串部分作为第1组(以及第2组?之后的查询,如果需要)。

答案 4 :(得分:0)

var url = 'http://domain.com/space/all/all/FarmAnimals?param=2';
//var url = 'http://domain.com/space/all/all/FarmAnimals';
var index_a = url.lastIndexOf('/');
var index_b = url.lastIndexOf('?');
console.log(url.substring(index_a + 1, (index_b != -1 ? index_b : url.length)));