Javascript 正则表达式:剥离路径直到捕获组中最后一次出现

Javascript Regex: Strip path until last occurence in a capturing group

我正在尝试过滤第一个捕获组中的路径。

目前第一个捕获组提取包括其父路径在内的路径。

虽然此行为完全没问题,但我不希望包含路径本身。捕获组一应该只提取父路径(如果有的话)。

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

正则表达式:

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

匹配对象:

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

预期结果:

[MATCH 1] I expect the first match (green) to be empty, since it does not have any parents nor childs

[MATCH 2] the same as [MATCH 1]

[MATCH 3] I expect the first match (green) to only contain the parents


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


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

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

不过,如果这也可以用正则表达式存档,我将不胜感激。

您可以修改正则表达式以实现所需的行为,例如

^(?:music|pictures)\/tom(\/(?:[\w-]+(?:[ ]+[\w-]+)*))*(\/(?:[\w-]+(?:[ ]+[\w-]+)*))$
                        <--------------------------->
                        Captures the parent directory

Regex Demo

如果您将 /tom 之后(以及最后一个之前)的所有内容都视为父目录,则可以将正则表达式修改为

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

Regex Demo