Javascript Regex:剥离路径直到捕获组中的最后一次出现

时间:2016-08-06 12:44:17

标签: javascript regex path strip

我试图过滤第一个捕获组中的路径。

目前,第一个捕获组提取包含其父路径的路径。

虽然这种行为完全正常,但我并不想要包含路径本身。捕获组1应该只提取父路径(如果有的话)。

捕获组2必须保持原样。 (见下图中的红色数字)

正则表达式:

/^(?:music|pictures)\/tom((?:\/((?:[\w-]+(?:[ ]+[\w-]+)*)))*)$/gm

匹配:

music/tom/foldername
music/tom/folder name
music/tom/foldername/folder2

预期结果:

enter image description here

  

[MATCH 1]   我希望第一场比赛(绿色)是空的,因为它   没有父母也没有孩子

     

[MATCH 2] 与[MATCH 1]相同

     

[MATCH 3] 我希望第一场比赛(绿色)只包含   父母

正则表达式演示:https://regex101.com/r/yN2kK2/1

从技术上讲,我可以保留我的正则表达式并使用Javascript来实现预期的行为:

str.substr(str.lastIndexOf('/'))

但是,我很欣赏是否可以使用正则表达式存档。

1 个答案:

答案 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