Regex:仅在斜线之间匹配路由参数,但在可选的斜杠之间匹配

问题描述 投票:0回答:1

所以我在这里有这个正则表达式:

\/?({[a-zA-Z_0-9]*})\/?

而且我希望它与这些匹配:

# Valid
/test3/{id}/{test}/{id}

# Valid
/admin/{slug}

# Not Valid
/test3{id}{test}

# Not Valid
/test/{id}/yyy/{dd}/dwdw/{wd}{d}

# Valid
/user/post/{id}

# Valid
/{tt}/{t}

# Valid
/test/{id}/yyy/{dd}////dwdw/{wd}/{d}

但是我希望它不匹配之间没有斜杠的参数,例如{id}{test}不匹配。

我该怎么做?

我在这里设置了正则表达式:https://regex101.com/r/awUDhM/5

regex preg-match-all
1个回答
0
投票

您可以查找/foo/{bar}或只是空的/的重复模式。代码段:

var input = [
  '/test3/{id}/{test}/{id}',
  '/admin/{slug}',
  '/test3{id}{test}',
  '/test/{id}/yyy/{dd}/dwdw/{wd}{d}',
  '/user/post/{id}',
  '/{tt}/{t}',
  '/test/{id}/yyy/{dd}////dwdw/{wd}/{d}'
];
input.forEach(function(str) {
  var result = /^(\/([a-zA-Z0-9]*|\{[a-z]+\}))+$/.test(str);
  console.log(str + ' ==> ' + result);
});

输出:

/test3/{id}/{test}/{id} ==> true
/admin/{slug} ==> true
/test3{id}{test} ==> false
/test/{id}/yyy/{dd}/dwdw/{wd}{d} ==> false
/user/post/{id} ==> true
/{tt}/{t} ==> true
/test/{id}/yyy/{dd}////dwdw/{wd}/{d} ==> true

/^(\/([a-zA-Z0-9]*|\{[a-z]+\}))+$/正则表达式的解释:

  • ^-字符串开头的锚点
  • (...)+-内部发生的一个或多个事件
  • [\/(...|...)-预期为斜杠,后跟逻辑OR组
  • [[a-zA-Z0-9]*-第一个OR项目:仅字母数字字符,不包括任何字符
  • [\{[a-z]+\}-第二个OR项目:{...}]中包含的一个或多个小写字符>
  • $-字符串末尾的锚点
© www.soinside.com 2019 - 2024. All rights reserved.