从第一个斜杠分割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
,这将产生未定义的。