所以我目前有一条路,我正尝试获取最后3条路;

测试:

/testing/path/here/src/handlebar/sample/colors.txt
/testing/path/here/src/handlebar/testing/another/colors.txt

正则表达式:
\/([^/]+\/[^/]+\/[^/]+)\.[^.]+$

结果:
handlebar/sample/colors
testing/another/colors

我想要它做什么:
sample/colors
testing/another/colors

如果有2个目录,然后是该目录,则应使用3个目录,并且如果包含单词 handlebar ,则该目录只能为两个。

最佳答案

您可以为handlebar/后面的所有内容创建一个组,如下所示:

与一个命名捕获组(subPath组包含所需值):

/handlebar\/(?<subPath>\S*)\.\S+$/gm

不命名(第一组包含想要的值):
/handlebar\/(\S*)\.\S+$/gm

说明:此正则表达式匹配所有以'handlebar /(...任何非空白字符0到无限次)。(任何空白字符1-inifite次)'结尾的所有内容。使用全局和多行标志时,如果您要检查用换行符分隔的一个字符串中的多个路径,例如

当您使用标记javascript标记问题时,下面是一些示例代码,说明如何检索正则表达式组的值
function getSubPath(fullPath = '') {
  const regex = /handlebar\/(?<subPath>\S*)\.\S+$/gm
  const match = regex.exec(fullPath)
  if (match) {
    return match.groups.subPath
  }
  return fullPath // regex.exec did not deliver match
}

getSubPath('/testing/path/here/src/handlebar/sample/colors.txt')
// returns 'sample/colors'

getSubPath('/testing/path/here/src/handlebar/testing/another/colors.txt')
// returns 'testing/another/colors'

没有命名组,只需读取/返回match.groups [1]即可获取第一个捕获组;索引0表示完全匹配(其中包括“/ handlebars”和文件扩展名)

09-25 15:54