正则表达式 : Strip path until last occurence in a capturing group

标签 javascript regex path strip

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

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

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

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

正则表达式:

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

匹配对象:

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

预期结果:

enter image description here

[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

关于正则表达式 : Strip path until last occurence in a capturing group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38804437/

相关文章:

javascript - jQuery - 仅当满足某些 HTML 属性时才在鼠标光标旁边显示图像

javascript - 内部内容排序

javascript - 与 JavaScript 相比,正则表达式在 Ruby 中表现不佳

macos - Mac OS X 上的 scp 问题 : scp doesn't like spaces in filenames, "\"修复不起作用

python - 如何以编程方式附加到系统路径?

file - Ant:在目录中查找文件的路径

javascript - 动态设置多个 setInterval(s) 并存储以供以后访问

java - 替换小写字母后跟句点后跟大写字母的正则表达式是什么?

c# - 正则表达式匹配带有 +(加号)的单词

javascript - jQuery 在表中搜索元素