从第一个斜杠分割javascript中的图像路径

从第一个斜杠分割javascript中的图像路径,javascript,Javascript,我有以下路径: /data/2/444/test.text 或(路径开头没有斜线) data/2/444/test.text 我想在JS中返回以下结果: "/2/444/test.text" 我尝试了以下方法:但我只获得了基本名称 new String(str).substring(str.lastIndexOf('/') + 1); 可以使用简单的正则表达式删除路径中的第一个目录 str.replace(/^\/?[^/]+\//, '/') ^\/?字符串开头的可选斜杠 [^

我有以下路径:

/data/2/444/test.text
或(路径开头没有斜线) data/2/444/test.text

我想在JS中返回以下结果:

   "/2/444/test.text"
我尝试了以下方法:但我只获得了基本名称

new String(str).substring(str.lastIndexOf('/') + 1);

可以使用简单的正则表达式删除路径中的第一个目录

str.replace(/^\/?[^/]+\//, '/')
  • ^\/?
    字符串开头的可选斜杠
  • [^/]+\/
    匹配任何非斜杠字符,直到遇到斜杠为止
const input=['/data/2/444/test.text','data/2/444/test.text','file.txt'];
const output=input.map(str=>str.replace(/^\/?[^/]+\/,'/'))
控制台日志(输出)您可以使用并传递一个正则表达式

const路径=[
“/data/path/one”,
“数据/路径/2”
];
const modifyPath=p=>{
const[fallback,newPath]=p.split(/\/?data/);
返回新路径| |回退;
}

console.log(path.map(modifyPath))
您可以在不使用正则表达式的情况下,使用
slice
indexOf
轻松完成此操作:

const getPath=path=>path.slice(path.indexOf('/',path[0]==“/”?1:0)-path.length);
log(getPath('/data/2/444/test.text');

log(getPath('data/2/444/test.text')
lastIndexOf
查找字符串中最后出现的字符串。在字符串
y
上使用
substring(x)
时,它将返回从
x
开始的
y
字符。因此,在这个用例中使用
lastIndexOf
并不是您想要的。您可以通过使用
indexOf
(查找字符串中第一个出现的字符串)来实现所需的功能。 要考虑输入字符串的不同格式(即
/data
data
),您只需测试一下:

function getPathWithoutData(str) {
    var strWithoutSlash = str[0] === '/' ? str.substring(1) : str;
    return strWithoutSlash.substring(strWithoutSlash.indexOf('/'));
}

它应该有多通用?路径是否总是以
/data
/
data
开头?有时它是从第一个斜杠开始的,但有时(正如您所描述的)它是从第二个斜杠开始的。什么决定从第一个或第二个开始?关于
str.split('/data')[1]
?请记住,如果路径中不存在
data
,这将产生未定义的。