【问题标题】:Can I use regular matching to get results?我可以使用正则匹配得到结果吗?
【发布时间】:2020-08-28 08:52:39
【问题描述】:

我有一个字符串'/blog/:year/:month/:day/:slug',希望能匹配下面的结果。

 ["/blog/:year/", "/blog/:year/:month/", "/blog/:year/:month/:day/"]

例如

const str = '/blog/2020/05/12/first'
// output: ['/blog/2020', '/blog/2020/05', '/blog/2020/05/12']
// or ['/blog/2020/', '/blog/2020/05/', '/blog/2020/05/12/']

例如

const reg = '/blog/:year/:month/:day/:slug'
const result = reg.split('/').reduce((a, b) => {
  a = Array.isArray(a) ? a : []
  a.push([a[a.length - 1], b].join('/'))
  return a
})
console.log(result.slice(1, -1))
// output: ['/blog/:year', '/blog/:year/:month', '/blog/:year/:month/:day']

【问题讨论】:

  • 您好,请使用 Stackoverflow 的tour
  • 您的预期结果是什么?你的实际结果是什么?以及如何实现您的实际结果(post code)?

标签: javascript regex match


【解决方案1】:
/([A-Za-z0-9]+)\/\d{4}\/\d{2}\/\d{2}/

该正则表达式与这样的字符串一起使用

  1. '/1blog641/2003/12/04/:slug' => 1blog641/2003/12/04
  2. '/someWordWitoutSpaces123/2003/12/04/:slug' => someWordWitoutSpaces123/2003/12/04

你可以在那里训练https://regexr.com/ 或阅读备忘单https://www.rexegg.com/regex-quickstart.html

【讨论】:

  • 感谢您的回答。但它不是固定的,例如'/blog/:year/:month/:slug'
  • @linka (\/[A-Za-z0-9]+\/\d{4}\/\d{2}\/\d{2})|(\/[ A-Za-z0-9]+\/\d{4}\/\d{2})|(\/[A-Za-z0-9]+\/\d{4}) 这抓住了所有你需要
  • 正确示例 在标题中,我认为 reg 看起来很优雅。
  • @linka 你试试吗 (\/[A-Za-z0-9]+\/\d{4}\/\d{2}\/\d{2})|( \/[A-Za-z0-9]+\/\d{4}\/\d{2})|(\/[A-Za-z0-9]+\/\d{4}) ?如果您需要 1 个正则表达式来所有 3 种类型,您可以在“|” 处拆分我的大
猜你喜欢
  • 2015-11-23
  • 2015-08-22
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多