所以,我尝试制作一个小的Regex表达式来获取请求的URL,减去开始的斜杠。
一个小问题,尾随斜杠不会总是存在,例如,如果用户请求"/test/example/"
,他们也可以请求"/test/example"
。所以我尝试制作一个方法来处理:
req.url.match(/^(?:\/)(.+)(?:[\/])?$/i)[1]
虽然,如果我请求像"/test/example/"
这样的路径,它会保留尾部斜杠,并在捕获组中返回"test/example/"
...?基本上我想避免的。 (所以,它正在做的就是删除起始斜杠)
现在,我尝试删除$符号旁边的?
。但是这只会在请求"/test/example"
(没有尾部斜杠)时导致错误,因为[1]
将为空。
我在regex101上做了一个例子,you can view here。正如你所看到的,捕获组包含结尾的斜杠,即使在我的表达中,我还是告诉它不要这样做。
TL; DR:Regex仍然捕获尾随斜杠,即使我不想这样做(并且请记住尾随斜杠不会一直存在)。
为了实现这一点,我希望正则表达式能够做到这一点:
"/test/example/"
至"test/example"
和
"/test/example"
至"test/example"
(因此,删除起始和尾部斜杠,但尾部斜杠是可选的)
答案 0 :(得分:0)
答案 1 :(得分:0)
答案 2 :(得分:0)
Javascript的正则表达式引擎并不是最强的。
我有一个像这样的问题,我最后分两步执行正则表达式,以提高可读性和可预测性。
var matches = req.url.match(/^(?:\/)(.+)(?:[\/])?$/i)
if(matches.length){
var my_url = matches[1].replace(/(^\/|\/$)/g,'') // Removes start and ending slashes
}else{
var my_url = 'something_else'
}