类似URL的正则表达式模式匹配

时间:2017-07-03 23:38:07

标签: javascript regex mountebank

我需要为不同的网址发送不同的响应。但我正在使用的正则表达式不起作用。

有问题的两个正则表达式是

"/v1/users/[^/]+/permissions/domain/HTTP/"    

(例如:http://localhost:4544/v1/users/10feec20-afd9-46a0-a3fc-9b2f18c1d363/permissions/domain/HTTP

"/v1/users/[^/]+/"    

(例如:http://localhost:4544/v1/users/10feec20-afd9-46a0-a3fc-9b2f18c1d363

我无法弄清楚如何在" [^ /] + /"之后停止正则表达式匹配。两种模式都返回相同的结果。就像正则表达式一样,它们都是相同的URL。模式匹配发生在使用匹配谓词的mountebank模拟服务器中。任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:3)

正则表达式"/v1/users/[^/]+/"匹配两个网址。您要求它匹配' / v1 / users /`以及除' /'之外的任何内容然后是斜线。这在较长的URL和较短的URL中都会发生,这就是它匹配的原因。

几个选项:

您可以匹配较长的网址而不是较短的网址:

"/v1/users/[^/]+/.+"

这匹配http://localhost:4544/v1/users/10feec20-afd9-46a0-a3fc-9b2f18c1d363/permissions/domain/HTTP,但不匹配http://localhost:4544/v1/users/10feec20-afd9-46a0-a3fc-9b2f18c1d363/

你也可以通过锚定结尾来匹配短的:

"/v1/users/[^/]+/$"

这匹配短网址,但不匹配长网址。