2

我有一个格式如下的 URL: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];

但这仅在第一种情况下有效,有人可以提供一个示例,说明如何使用可选的问号闭包设置此正则表达式吗?

非常感谢!

4

5 回答 5

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

任何非/ 后跟?或和行尾。

于 2013-04-23T22:23:53.457 回答
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];
于 2013-04-23T22:34:19.180 回答
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'].

然后只需抓住其中的第一个元素。

于 2013-04-23T22:22:55.457 回答
1

这个

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

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

于 2013-04-23T22:36:54.247 回答
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)));
于 2013-04-23T22:31:54.547 回答