将在关键字之后和问号之前匹配的正则表达式

Regex that wil match after keyword and before question mark

我在使用以下测试字符串的 regex101 上卡住了:

https://localhost:8443/site/recipes/recepten-zoeken/menugang:hoofdgerecht/soort:italiaans/seizoen:winter?Nrpp=24

我正在尝试匹配介于两者之间的所有内容:recepten-zoeken/ 和 ?

我目前的尝试无济于事,因为我是编写正则表达式的新手。有人想凑钱吗?

这是我目前拥有的:

.(?=([^/recepten-zoeken/]?)*$)

尝试在捕获组中捕获您的值:

recepten-zoeken\/([^?]+)\?

说明

  • recepten-zoeken字面匹配
  • \/ 匹配正斜杠
  • ([^?]+) 在组中捕获一个否定字符 class [^,它将匹配 NOT 一个问号。 (这将包含您的价值)
  • \?字面匹配

var s = "https://localhost:8443/site/recipes/recepten-zoeken/menugang:hoofdgerecht/soort:italiaans/seizoen:winter?Nrpp=24"
console.log(s.match(/recepten-zoeken\/([^?]+)\?/)[1])

感谢 ctwheels 提供了片段和评论。

这样做就可以了:

var match = url.match(/\/recepten-zoeken\/([^?]+)\?/);
// match[1] == "menugang:hoofdgerecht/soort:italiaans/seizoen:winter"

这个正则表达式将匹配第一次出现的 /recepten-zoeken/,然后它会开始捕获所有不是问号的字符([^?] 是一个否定字符 class,它匹配任何 不是在class).

请注意,它还会确保有一个问号。如果你想支持没有问号的情况,那么只需删除最后的 \?.

您原来的正则表达式只匹配单个字符(.),然后它会尝试向前查找不是 ce、[=17= 的字符], / 或介于 nz.

之间

使用捕获组。(()括号表示捕获组)

捕获到最后一个问号

试试这个正则表达式 \/recepten-zoeken\/(.*)\?

解释:-

  • \/ 匹配正斜杠
  • recepten-zoeken字面匹配
  • \/ 匹配正斜杠
  • (.*) 将所有值(新行除外)捕获到字符串中的最后一个问号(这将包含您的值)
  • \?字面匹配

//-------------------------select upto last ? -----------------------------

str = "https://localhost:8443/site/recipes/recepten-zoeken/menugang:hoofdgerecht/soort:italiaans/seizoen:winter?Nrpp=24";
var myRegexp = /\/recepten-zoeken\/(.*)\?/;
console.log(myRegexp.exec(str)[1]);

捕获第一个问号

试试这个正则表达式 \/recepten-zoeken\/([^?]*)\?

解释:-

  • \/ 匹配正斜杠
  • recepten-zoeken字面匹配
  • \/ 匹配正斜杠
  • ([^?]*) 在一个组中捕获所有值(除了?)直到字符串中的第一个问号(这将包含您的值)(这里 [^?] 表示匹配除 ? 之外的任何字符)
  • \?字面匹配

//-------------------------select upto first ? -----------------------------

var str = "https://localhost:8443/site/recipes/recepten-zoeken/menugang:hoofdgerecht/soort:italiaans/seizoen?:winter?Nrpp=24";
var myRegexp = /\/recepten-zoeken\/([^?]*)\?/;
console.log(myRegexp.exec(str)[1]);