首页 > 解决方案 > 我可以使用正则匹配得到结果吗?

问题描述

我有一个字符串'/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']

标签: javascriptregexmatch

解决方案


/([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


推荐阅读