在为我的网站编写API服务时,我意识到String.split()
不会再这么做了,并决定试试我的正则表达式。我几乎已经完成了,但我无法找到最后一点。这就是我想要做的事情:
URL表示函数调用:
/api/SECTION/FUNCTION/[PARAMS]
最后一部分,包括斜杠,是可选的。某些函数显示JSON答复,而不必接收任何参数。示例:/api/sounds/getAllSoundpacks
打印可用声音包列表。但是,/api/sounds/getPack/8Bit
会打印详细信息。
这是我试过的表达式:
req.url.match(/\/(.*)\/(.*)\/?(.*)/);
我错过了使最后一部分可选 - 或者整体捕获它?
答案 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;更好"因为它不会像垃圾那样匹配" ///"。)