假设我有以下字符串:
1: /kb/tags/racing?&foo=bar
2: /kb/tags/racing
3: /kb/tags/racing#hash
4: /kb/tags/racing:foo:bar#hash
5: /kb/tags/racing?&foo=bar#hash比赛:
1: Should match "racing"
2: Should match "racing"
3: Should match "racing"
4: Should match "racing:foo:bar"
5: Should match "racing"以下是我尝试过的(&失败的):
/(?<=[kb\/tags])[^\?|\#]*(?=})/不管怎么说这都没用..。但我挖了个洞,有什么主意吗?
干杯
发布于 2014-07-17 01:19:40
用这个:
\/kb\/tags.*/([^/?#\s]+)(?!.*\/)并从捕获组1中检索火柴。
在演示中,请参见右侧窗格中的第一组捕获。
示例JavaScript:
var myregex = /\/kb\/tags.*\/([^\/?#\s]+)(?!.*\/)/;
var matchArray = myregex.exec(yourString);
if (matchArray != null) {
thematch = matchArray[1];
} else {
thematch = "";
}解释
\/kb\/tags匹配/kb/tags.*匹配任何字符/匹配正斜杠([^/?#\s]+)周围的括号捕获一个或多个字符,这些字符不是组1括号内的字符(?!.*/)断言,下面不是anychars,然后是正斜杠,确保我们得到了最后一个斜线。参考
发布于 2014-07-17 01:23:47
我猜你想
(str.match(/(?<=kb\/tags\/)[^?#]*/) || [])[0]但是JS不支持后面的查找。然后,您可以尝试一个捕获组:
(str.match(/kb\/tags\/([^?#]*)/) || [])[1]发布于 2014-07-17 01:57:50
假设您的href将在您的示例中类似,那么这样的情况如何?
Javascript
var hrefs = [
'/kb/tags/racing?&foo=bar',
'/kb/tags/racing',
'/kb/tags/racing#hash',
'/kb/tags/racing:foo:bar#hash',
'/kb/tags/racing?&foo=bar#hash',
'http://example.com/kb/tags/breeding:racing:breeding:all+articles?&sdff=sfff#jsdf'
];
hrefs.forEach(function (href) {
console.log(href.split('#').shift().split('?').shift().split('/kb/tags/').pop());
});输出
racing
racing
racing
racing:foo:bar
racing
breeding:racing:breeding:all+articles 论jsFiddle
https://stackoverflow.com/questions/24793366
复制相似问题