使用RegEx捕获URL的可选部分

时间:2014-09-14 11:48:39

标签: javascript regex

在为我的网站编写API服务时,我意识到String.split()不会再这么做了,并决定试试我的正则表达式。我几乎已经完成了,但我无法找到最后一点。这就是我想要做的事情:

URL表示函数调用:

/api/SECTION/FUNCTION/[PARAMS]

最后一部分,包括斜杠,是可选的。某些函数显示JSON答复,而不必接收任何参数。示例:/api/sounds/getAllSoundpacks打印可用声音包列表。但是,/api/sounds/getPack/8Bit会打印详细信息。

这是我试过的表达式:

req.url.match(/\/(.*)\/(.*)\/?(.*)/);

我错过了使最后一部分可选 - 或者整体捕获它?

3 个答案:

答案 0 :(得分:0)

这将捕获您的URL中FUNCTION /之后的所有内容,与FUNCTION /后面的任何其他内容无关:

FUNCTION\/(.+)$

如果在FUNCTION之后没有任何部分,RegExp将不匹配。

答案 1 :(得分:0)

这个正则表达式应该通过最后一个斜杠和部分后可选:

/^\/[^/]*\/[^/]*(?:\/.*)?$/

这匹配所有这些字符串:

/api/SECTION/FUNCTION/abc
/api/SECTION
/api/SECTION/
/api/SECTION/FUNCTION

答案 2 :(得分:0)

你的模式/(.*)/(.*)/?(.*)几乎是正确的,它有点太短 - 它允许2或3个斜线,但你想要接受3或4斜线的任何东西。如果你想捕获最后一个(可选的)斜杠及其背后的任何文本,你只需要围绕该部分创建一个组并使其成为可选:

/.*/.*/.*(?:/.+)?

应该这样做。

Demo.(模式看起来不同,因为启用了多线模式,但它仍然有效。它也有点'#34;更好"因为它不会像垃圾那样匹配" ///"。)