首页 文章

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

提问于
浏览
3

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

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

虽然这种行为完全正常,但我不希望包含路径本身 . 捕获组1应仅提取父路径(如果有) .

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

Regex:

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

Match against:

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

Expected results:

enter image description here

[MATCH 1]我希望第一场比赛(绿色)是空的,因为它没有任何父母和孩子[MATCH 2]和[MATCH 1] [MATCH 3]相同我期待第一场比赛(绿色)到只包含父母


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


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

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

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

1 回答

  • 3

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

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

    Regex Demo

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

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

    Regex Demo

相关问题