将在关键字之后和问号之前匹配的正则表达式
Regex that wil match after keyword and before question mark
我在使用以下测试字符串的 regex101 上卡住了:
我正在尝试匹配介于两者之间的所有内容: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).
请注意,它还会确保有一个问号。如果你想支持没有问号的情况,那么只需删除最后的 \?
.
您原来的正则表达式只匹配单个字符(.
),然后它会尝试向前查找不是 c
、e
、[=17= 的字符], /
或介于 n
和 z
.
之间
使用捕获组。(()
括号表示捕获组)
捕获到最后一个问号
试试这个正则表达式 \/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]);
我在使用以下测试字符串的 regex101 上卡住了:
我正在尝试匹配介于两者之间的所有内容: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).
请注意,它还会确保有一个问号。如果你想支持没有问号的情况,那么只需删除最后的 \?
.
您原来的正则表达式只匹配单个字符(.
),然后它会尝试向前查找不是 c
、e
、[=17= 的字符], /
或介于 n
和 z
.
使用捕获组。(()
括号表示捕获组)
捕获到最后一个问号
试试这个正则表达式 \/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]);