所以我目前有一条路,我正尝试获取最后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”和文件扩展名)