我试图过滤第一个捕获组中的路径。
目前,第一个捕获组提取包含其父路径的路径。
虽然这种行为完全正常,但我并不想要包含路径本身。捕获组1应该只提取父路径(如果有的话)。
捕获组2必须保持原样。 (见下图中的红色数字)
正则表达式:
/^(?:music|pictures)\/tom((?:\/((?:[\w-]+(?:[ ]+[\w-]+)*)))*)$/gm
匹配:
music/tom/foldername
music/tom/folder name
music/tom/foldername/folder2
预期结果:
[MATCH 1] 我希望第一场比赛(绿色)是空的,因为它 没有父母也没有孩子
[MATCH 2] 与[MATCH 1]相同
[MATCH 3] 我希望第一场比赛(绿色)只包含 父母
正则表达式演示:https://regex101.com/r/yN2kK2/1
从技术上讲,我可以保留我的正则表达式并使用Javascript来实现预期的行为:
str.substr(str.lastIndexOf('/'))
但是,我很欣赏是否可以使用正则表达式存档。
答案 0 :(得分:3)
您可以修改正则表达式以实现所需的行为,例如
^(?:music|pictures)\/tom(\/(?:[\w-]+(?:[ ]+[\w-]+)*))*(\/(?:[\w-]+(?:[ ]+[\w-]+)*))$
<--------------------------->
Captures the parent directory
<强> Regex Demo 强>
如果您将/tom
之后(以及之前)的所有内容都视为父目录,则可以将正则表达式修改为
^(?:music|pictures)\/tom((?:\/(?:[\w-]+(?:[ ]+[\w-]+)*))*)(\/(?:[\w-]+(?:[ ]+[\w-]+)*))$
<强> Regex Demo 强>