我尝试匹配网址的最后一段,当且仅当它没有特定段之前(' news-events')。所以,例如,我想匹配我的slug'这里:
http://example.com/my-slug
......但不在这里:
http://example.com/news-events/my-slug
我正在使用javascript - 尝试过类似的内容:
\b(?!news-events)(\/\w+)\b$
...但是字边界方法在这里不起作用,因为/ char充当了片段之间的边界(因此,最后一个片段被选中,无论它是否在前面被'新闻事件'
任何想法都会受到赞赏。
非常感谢。
答案 0 :(得分:3)
针对可选的尾部斜杠
进行了更新不要被愚弄,这是一个棘手的正则表达式。
/^(?:(?!news-events\/[^\/\r\n]*\/?$).)*?\/([^\/\r\n]+)\/?$/
该段位于捕获组1中。
https://regex101.com/r/hrLqRq/3
^
(?:
(?! news-events/ [^/\r\n]* /? $ )
.
)*?
/
( [^/\r\n]+ ) # (1)
/?
$
答案 1 :(得分:1)
您可以尝试在正斜杠上拆分URL,然后检查倒数第二个条目是不是 news-events
,最后一个条目是my-slug
。
var url = 'http://example.com/news-events/my-slug';
var parts = url.split('/');
var n = parts.length
if (parts[n - 2] !== 'news-events' && parts[n - 1] === 'my-slug') {
console.log("match")
}
else {
console.log("no match")
}
答案 2 :(得分:1)
您可以查看.pathname
或一个或多个字词的网址
let sources = [
"http://example.com/my-slug"
, "http://example.com/news-events/my-slug"
];
let match = "/my-slug";
let not = "/news-events";
for (let src of sources) {
let url = new URL(src);
if (new RegExp(`^${not}${match}`).test(url.pathname)) {
console.log("not", url.pathname)
} else {
if (new RegExp(`^${match}$`).test(url.pathname))
console.log("ok", url.pathname)
}
}