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

时间:2018-04-17 14:58:13

标签: javascript regex between

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

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

我试图匹配两者之间的所有内容:recepten-zoeken /和?

我现在的尝试让我无处可去,因为我非常喜欢写正则表达式。有人想要进入芯片吗?

这就是我目前所拥有的:

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

3 个答案:

答案 0 :(得分:2)

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

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

<强>解释

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

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

ctwheels 提供摘录和评论的信用。

答案 1 :(得分:1)

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

捕获最后一个问号

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

说明: -

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

&#13;
&#13;
//-------------------------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]);
&#13;
&#13;
&#13;

捕获第一个问号

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

说明: -

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

&#13;
&#13;
//-------------------------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]);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这样就可以了:

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

此正则表达式将匹配第一次出现/recepten-zoeken/,然后它将开始捕获所有不是问号的字符([^?]是一个负字符类,匹配任何不是在课堂上)。

请注意,它还会确保存在问号。如果您想支持没有问号的情况,请删除最终的\?

您的原始正则表达式仅匹配单个字符(.),然后它会尝试查找不是cek的字符, /nz之间。