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
如果您将 /tom
之后(以及最后一个之前)的所有内容都视为父目录,则可以将正则表达式修改为
^(?:music|pictures)\/tom((?:\/(?:[\w-]+(?:[ ]+[\w-]+)*))*)(\/(?:[\w-]+(?:[ ]+[\w-]+)*))$
我正在尝试过滤第一个捕获组中的路径。
目前第一个捕获组提取包括其父路径在内的路径。
虽然此行为完全没问题,但我不希望包含路径本身。捕获组一应该只提取父路径(如果有的话)。
捕获组 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
如果您将 /tom
之后(以及最后一个之前)的所有内容都视为父目录,则可以将正则表达式修改为
^(?:music|pictures)\/tom((?:\/(?:[\w-]+(?:[ ]+[\w-]+)*))*)(\/(?:[\w-]+(?:[ ]+[\w-]+)*))$