我需要在用户URL的不同输入中提取目录和文件名。
一些例子包括:
我真正需要的是TOP_PROD_IMAGE
和WS-25612-BK_IMRO_1.jpg
文件名。
因此,我需要考虑输入http://
或https://
或仅输入www
的用户。因此我尝试使用string.split('/')
,但显然并非在所有情况下都可行。在用户输入http的情况下,尽管输入了两个//
,是否可以给我一个数组?谢谢!
答案 0 :(得分:5)
考虑:
const [file, folder] = url.split('/').reverse();
使用此方法,您无需考虑http://
或任何//
答案 1 :(得分:4)
怎么样:
const url = new URL('https://foo/s3.amazonaws.com/TOP_PROD_IMAGE/WS-25612-BK_IMRO_1.jpg')
const urlParams = url.pathname.split('/') // you'll get array here, so inspect it and get last two items
这会成功吗?您将在pathname
中获得所需的东西。
答案 2 :(得分:0)
如果网址必须以http
和可选的s
或www.
开头,那么您还可以使用具有两个捕获组的模式来获取最后一个斜杠之前的部分和该部分最后一个斜杠之后。
^(?:https?:\/\/|www\.)\S+\/([^/]+)\/(\S+)$
urls = [
"https://foo/s3.amazonaws.com/TOP_PROD_IMAGE/WS-25612-BK_IMRO_1.jpg",
"http://192.168.12.44:8090/TOP_PROD_IMAGE/R3CRDT-HZWT_IMRO_1.jpg",
"www.foobar-images.s3.amazonaws.com/TOP_PROD_IMAGE/WS-25612-BK_IMRO_1.jpg"
].forEach(s => {
let m = s.match(/^(?:https?:\/\/|www\.)\S+\/([^/]+)\/(\S+)$/, s);
console.log(m[1]);
console.log(m[2]);
console.log("\n");
});
答案 3 :(得分:0)
您可以使用否定前瞻仅匹配最终的URI段:
/(?!([https?:\/\/]|[www.]))(?!([\d]))(?!(.*[com])).*/
const re = /(?!([https?:\/\/]|[www.]))(?!([\d]))(?!(.*[com])).*/
const arr = [
"https://foo/s3.amazonaws.com/TOP_PROD_IMAGE/WS-25612-BK_IMRO_1.jpg",
"http://192.168.12.44:8090/TOP_PROD_IMAGE/R3CRDT-HZWT_IMRO_1.jpg",
"www.foobar-images.s3.amazonaws.com/TOP_PROD_IMAGE/WS-25612-BK_IMRO_1.jpg"
]
const res = arr.map(str => re.exec(str)[0].split("/"))
console.log(res)