Express Javascript Regex只允许没有句点的字符串

时间:2015-06-09 21:41:38

标签: javascript regex node.js express routes

我有一个处理localhost:3000 / test的快速路由。我希望此后的所有内容都没有使用相同的router.get命令进行渲染。我正在努力找出正确的Javascript正则表达式字符串。

router.get('/test/:path[\s^.]*$', function () {
    //res.render etc
}

所以,当我访问localhost:3000 / test / math或localhost:3000 / test / math / geometry时,我希望它使用相同的路由。但是当我导航到localhost:3000 / test / math / geometry.test时,我希望它使用不同的路径。我之前使用的是正则表达式而不确定如何将它与快速参数功能结合起来。

编辑:adeneo的想法不起作用,因为我无法使用一段时间的支票正确链接我的函数。这是正则表达式的要点,所以我在执行页面逻辑之前检查了URL。

劳尔,我担心你误解了这个问题。让我试着说清楚一点。

我有一个像这样的文件夹列表:

test
--folder1
----test1.js
----test2.js
----test3.js
--folder2
----folder2-1
----folder2-3
------test4.js
------test5.js
----test6.js
--folder3

以下网址应该有一个捕获它们的正则表达式:

test/folder1
test/folder2
test/folder2/folder2-3

和另一个只捕获以下内容:

test/folder1/test1.js
test/folder2/folder2-3/test4.js
test/folder2/test6.js

就像我说的,我已经完成了正则表达式,我只是无法弄清楚如何使用Express的paramName功能。

1 个答案:

答案 0 :(得分:0)

在这种情况下,订单很重要。 如果你先放置例外,你将处理路径。

app.get('/test/math/geometry.test', function (req, res) {
  res.send('catch it');
});

app.get('/test/:path*', function (req, res) {
  res.send('the params are    ' +  JSON.stringify(req.params));
});

如果您使用例如'/ test / maths / dificults'尝试此路线,您最终可以看到req.params有类似的内容:

 {"0":"/maths/dificults","path":"maths"}

您可以按位置访问原始参数,在本例中为“0”,因为根据名称,您可以在第一个'/'中删除参数

修改

您可以应用相同的概念并使用内部的真实正则表达式:

app.get(/\/test\/[^\.]*$/, function (req, res) {
  res.send('catch it without dot');
});

app.get('/test/*', function (req, res) {
  res.send('catch it with dot');
});

你可以使用parentesis ()来捕获params req.params喜欢// test /([^.]*)$/