给定https://xxxxxxxxxx.cloudfront.net/dir1/dir2/file.ext
之类的字符串,我想获得dir2
我有这个正则表达式:/(\.net\/)([^\/]*)/
,但这只能让我获得捕获组dir1
如何修改此项以匹配dir2
?
我正在使用正则表达式一步替换字符串。
.replace(/(\.net\/)([^\/]*)/,'$1'+'newfilename'
所以我不想只提取dir2
。我希望我的正则表达式匹配它。所以我可以替换它。
答案 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)