使用path-to-regexp时,如何匹配所有不以/api/
开头的路径?
使用原生JavaScript RegExp /^(?!\/api\/).*/
将匹配/x/y/z
。查看来自here的测试结果
但是,它不适用于path-to-regexp。查看there
的测试结果那么在路径到正则表达式中实现目标的正确方法是什么?
[更新1]
更多细节: 真实的情况是我正在使用angular2 + koajs。在angular2中,浏览器可以向服务器发出客户端路由URL。有关此问题,请参阅我的another question。
要解决该问题,正如@mxii所建议的那样,我正在尝试使用koa-repath将所有未以/api/
开头的请求重定向到根网址:http://localhost:3000/
,除非它是静态资产(js / json / html / png / ...)请求。
koa-repath
使用path-to-regexp
来匹配路径。这就是我问这个问题的原因。
答案 0 :(得分:3)
请参阅我的评论,了解快速路线测试仪的工作原理。
如果您只想要一个简单的正则表达式来检查字符串是不是以api
还是/api
开头,那么您不需要“路径到正则表达式”,您可以简单地使用这个正则表达式:
/^(?!\/?api).+$/
说明:
^ => beginning of string
(?!) => negative look-ahead
\/? => 0 or 1 slash
.+ => 1 or more character (any except newline)
$ => end of string
如果字符串的开头没有跟/api
(可选的斜杠),那么你得到一个匹配。
有关示例,请参阅http://regexr.com/3e3a6。
修改:如果您想要反过来(仅匹配以/api
或api
开头的网址,您可以使用正面预测:
^(?=\/?api).+$
但它更简单:
^\/?api.*$
答案 1 :(得分:0)
模式打击[/ somestring] +,
需要正则表达式例如,
答案 2 :(得分:0)
我试图做同样的事情。似乎回答的人实际上并没有试图理解您的要求。
我不确定是否可以在正则表达式路径中使用。似乎没有负面的展望。
您可以做的是更改路由路径的顺序。在添加静态内容之前,添加您的api路由来表达/。
app.use('/api', require('./api'));
app.get('/*', function (req, res) {
//serve angular app
});
我是这样做的,并且api路由也可以工作。