表达 Javascript 正则表达式只允许没有句点的字符串

Express Javascript Regex to only allow strings without periods

我有一条处理 localhost:3000/测试的快速路线。我希望在此之后没有句号的所有内容都可以使用相同的 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。

Raul 恐怕您误解了这个问题。让我试着说得更清楚。

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

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

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

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

还有一个只捕获以下内容:

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

就像我说的,我已经完成了正则表达式,我只是不知道如何使用 Express 的 :paramName 功能。

在这种情况下顺序很重要。 如果您将异常放在首位,您将处理该路径。

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');
});

并且您可以使用括号 () 来捕获参数 req.params 喜欢 //test/([^.]*)$/