假设我有以下字符串:
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"
这是我尝试过的(& failed):
/(?<=[kb\/tags])[^\?|\#]*(?=})/
这无论如何都行不通......但我有一个挖掘,有任何想法吗?
干杯
答案 0 :(得分:1)
使用此:
\/kb\/tags.*/([^/?#\s]+)(?!.*\/)
从捕获组1中检索匹配。
在演示中,请参阅右侧窗格中的Group 1 captures。
示例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组(?!.*/)
断言接下来的不是任何一个正斜线,确保我们得到最后一个。<强>参考强>
答案 1 :(得分:1)
我猜你想要
(str.match(/(?<=kb\/tags\/)[^?#]*/) || [])[0]
但是JS并不支持外观。然后,您可以尝试捕获组:
(str.match(/kb\/tags\/([^?#]*)/) || [])[1]
答案 2 :(得分:1)
这样的事情怎么样,假设你的hrefs会像你的例子中那样。
的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
上
答案 3 :(得分:0)
.*\/\K(?:[^?#]|$|\n)*
试试这个