0

我正在开发一个 node.js 应用程序,并且正在做路由器匹配。

我需要将所有路由与所有变量匹配,除了以“public、static、files 或添加了“/”的相同单词开头的那些

我知道我可以在 regexp 之前使用 if 语句来检查这些单词是否带有 url,如果是,则跳过 regexp,但我不想添加这样的嵌套,并且知道如何使用 regexp 将成为反正在未来很方便。

我知道如何匹配除...某些字母以外的任何内容,即 ^[0-9] ,但我不能对单词使用相同的内容。我用谷歌搜索,发现前瞻可以解决这个问题,但是......我无法让它工作。

最后,id 喜欢使用类似这样的东西(在伪代码中),其中 .+ 仅在模式与任何给定单词不匹配时才会匹配。匹配(/^(?!public|static|files) .+ /gi)

编辑1:

url 的格式将是这样的......带或不带斜杠。

/controller/action/4/var:something/

我想制作一个匹配这个控制器的正则表达式 - 动作 - id 模式,但同时不会匹配这样的模式 /public/images/4 或 static/files/somefile

一般来说,id 喜欢知道如何匹配一个模式,但前提是它不以给定的单词开头。

例如像这样的东西......但它不起作用(匹配.+,但前提是它不包含前面提到的单词/^(?!公共|静态|文件)。+ /gi)

4

1 回答 1

0

实际上,我没有遇到负面预测的问题。像这样的东西似乎工作得很好,虽然它不是超级可扩展的。

/^\/(?!public|static|files)([^\/]+)?\/?([^\/]+)?\/?([^\/]+)?\/?(.*)$/i

第一个捕获将是控制器,第二个是动作,第三个是 ID,第四个是剩下的。

看到这个jsfiddle

于 2013-11-09T15:55:11.977 回答