正则表达式以匹配URL-字符串末尾的数字,但也匹配字符串开头的字符

时间:2019-04-24 07:08:53

标签: javascript regex reactjs express next.js

我需要匹配以下网址格式

/yc/leroy-jenkins-123

所以我需要同时匹配/yc/部分和123

当它的/leroy-jenkins-123与以下内容匹配时,我就可以将该网址与之匹配

server.get(/([^-]*)$/, (req, res) => {
    const actualPage = '/profile'
    const queryParams = { id: req.params[0] }
    app.render(req, res, actualPage, queryParams)
})

所以我可以将123([^-]+)$匹配,但是我也应该如何匹配/yc/部分?

2 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式从组1和组2捕获值,

^(\/[^\/]+\/).*?(\d+)$

Regex Demo

说明:

  • ^-匹配字符串的开头
  • (\/[^\/]+\/)-匹配/后跟/以外的其他任何字符,再匹配一个或多个/并在组1中捕获该值
  • .*?-允许零​​个或多个任意字符的可选匹配
  • (\d+)$-匹配一个或多个数字并将其捕获在group2中,然后捕获字符串的结尾

答案 1 :(得分:1)

只需与^\/\w+\/交替:

server.get(/([^-]+)$|^\/\w+\//, ...

还要注意,您可能应该在字符串末尾重复至少一个非破折号,否则它可以与末尾的空字符串匹配,例如URL

/

并且没有其他匹配项,因为字符串末尾(至少)有零个非破折号字符,这可能是不希望的。

除非该小组实际上正在被用于某件事,否则请随意将其完全抛弃:

server.get(/[^-]+$|^\/\w+\//, ...