首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用路径到regexp匹配所有不是以/api/开头的路径?

如何使用路径到regexp匹配所有不是以/api/开头的路径?
EN

Stack Overflow用户
提问于 2016-08-24 12:40:06
回答 3查看 20.9K关注 0票数 10

使用路径对正则表达式时,如何匹配不以/api/开头的所有路径

通过使用本机JavaScript,RegExp /^(?!\/api\/).*/将匹配/x/y/z。见这里的测试结果

但是,它不适用于路径到regexp。参见那里的测试结果

,那么,实现我的目标的正确方法是什么?

更新1

更多细节:真正的情况是我使用的是angular2 + koajs。在angular2中,浏览器可能会向服务器发出客户端路由url。请看一下我的另一个问题

为了解决这个问题,正如@mxii所建议的那样,我试图使用koa-repath将所有未以/api/启动的请求重定向到根url:http://localhost:3000/例外--它是静态资产(js/json/html/png/.)请求。

koa-repath使用path-to-regexp来匹配路径。所以我才问这个问题。

EN

回答 3

Stack Overflow用户

发布于 2016-08-24 13:17:58

有关快速路测试器工作原理的说明,请参阅我的评论。

如果您只想要一个简单的正则表达式来检查字符串是否以api/api开头,那么您不需要使用“路径到正则表达式”,只需使用这个正则表达式:

代码语言:javascript
复制
/^(?!\/?api).+$/

解释:

代码语言:javascript
复制
^    => 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

编辑:如果你想用另一种方式(只匹配以/apiapi开头的urls ),你可以使用正面的前瞻性:

代码语言:javascript
复制
^(?=\/?api).+$

http://regexr.com/3e3a9

但更简单的是:

代码语言:javascript
复制
^\/?api.*$

http://regexr.com/3e3af

票数 3
EN

Stack Overflow用户

发布于 2020-05-06 04:18:51

我也想做同样的事。似乎那些回答的人并没有真正理解你在问什么。

我不确定这是否有可能做到的路径,以-雷杰普。它似乎没有消极的前景。

你能做的就是改变你的路线的顺序。在添加静态内容之前,添加api路由以表示/任何内容。

代码语言:javascript
复制
app.use('/api', require('./api'));

app.get('/*', function (req, res) {
  //serve angular app  
});

我就是这样做的,api路径也能工作。

票数 2
EN

Stack Overflow用户

发布于 2019-06-11 02:25:11

模式blow /somestring+所需的Regex,

例如,

  1. /api -有效
  2. /asdsa -有效
  3. /-无效
  4. asdsa -无效
  5. /asd/asd/asd -有效
  6. /as/ -无效
  7. /aas/a -有效
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39123607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档