匹配子目录

时间:2014-01-15 21:30:32

标签: javascript regex

给定https://xxxxxxxxxx.cloudfront.net/dir1/dir2/file.ext之类的字符串,我想获得dir2

我有这个正则表达式:/(\.net\/)([^\/]*)/,但这只能让我获得捕获组dir1

如何修改此项以匹配dir2

我正在使用正则表达式一步替换字符串。

.replace(/(\.net\/)([^\/]*)/,'$1'+'newfilename'

所以我不想只提取dir2。我希望我的正则表达式匹配它。所以我可以替换它。

5 个答案:

答案 0 :(得分:1)

/.*\/([^\/]+)\/[^\/]*$/

捕获组1将是路径中的最后一个目录。

如果您想要替换dir2而不是提取它,那么您的捕获组应该是除之外的所有:dir:

str.replace(/(.*\/)[^/]+(\/[^\/]*)$/, '$1test$2');

> str = 'https://xxxxxxxxxx.cloudfront.net/dir1/dir2/file.ext'
> str.replace(/(.*\/)[^/]+(\/[^\/]*)$/, '$1test$2');
"https://xxxxxxxxxx.cloudfront.net/dir1/test/file.ext"

答案 1 :(得分:1)

男人,这里真正的挑战是了解你真正想要的是什么。

所以,如果我理解正确的话:

input   xxxxx/a/b
output  xxxxx/a/test

input  xxxxx/a/b/file.xyz
output xxxxx/a/test/file.xyz

我想你考虑'。'作为文件名的指示符。

如果这是你想要的,那就是获得它的方法:

function change_last_dir (str, new_dir)
{
    var split = str.split ('/');
    var pos = (split[split.length-1].indexOf ('.') < 0) ? -1 : -2;
    split.splice (pos, 1, new_dir);
    return split.join('/');
}

答案 2 :(得分:0)

使用URI.js获取路径,然后使用.directory()获取所需的目录。

答案 3 :(得分:0)

使用纯RegEx足够简单:[^/]+(?=/[^/]+$)

退出/,因为您将其用作分隔符。

答案 4 :(得分:0)

另一种可能的解决方案:

var subDirs = url.split('/').slice(-2, -1);

fiddle