46

How can I parse a url?

site.com:8080/someFile.txt?attr=100

or

site.com:8080/someFile.txt/?attr=100

I need to get someFile.txt, where is a file name I set by myself as the format (txt or some other).

UPDATE

I tried

var path = url.parse(req.url).path;

But I still cannot get the path (someFile.txt).

8
  • 1
    You should mention all the details from the beginning. - nodejs.org/docs/latest/api/url.html Commented Nov 18, 2014 at 23:50
  • 2
    Do you mean you neeed to get someFile.txt? Commented Nov 18, 2014 at 23:53
  • Yes. It could be any file on server (i.e. Kitty.jpg or order.json). Commented Nov 18, 2014 at 23:54
  • Is the URL guaranteed to be in this format? Will there ever be a leading http:// Commented Nov 18, 2014 at 23:57
  • No that isn't necessary. Commented Nov 18, 2014 at 23:59

4 Answers 4

95

Something like this..

var url = require("url");
var path = require("path");
var parsed = url.parse("http://example.com:8080/test/someFile.txt/?attr=100");
console.log(path.basename(parsed.pathname));
Sign up to request clarification or add additional context in comments.

6 Comments

I use node.js server. And I try to parse the code on server side.
i just did and it is /test/someFile.txt/
path.posix.basename will return the filename on windows and linux, path.basename only returns filename on windows nodejs.org/api/path.html#path_windows_vs_posix
This prints escaped characters, this should be: console.log(decodeURIComponent(path.basename(parsed.pathname)));
@LiamPillay this method is deprecated. use new URL("url here")
|
10

here's my working code, hope it helps

import path from 'path'

const getBasenameFormUrl = (urlStr) => {
    const url = new URL(urlStr)
    return path.basename(url.pathname)
}

Comments

2
decodeURIComponent(path.basename('http://localhost/node-v18.12.1-x64.msi'))

node-v18.12.1-x64.msi

Comments

-1

Your example can easily be dealt with using Node.js’s url module:

var URL = require('url').parse('site.com:8080/someFile.txt?attr=100');
console.log(URL.pathname.replace(/(^\/|\/$)/g,'')); // "someFile.txt"

However, this doesn’t work with Node.js’s exemplary URL (’cause it’s got more path).

By truncanting the complete path starting at its rightmost slash, it’ll yield the file name:

var URL = require('url').parse('http://user:[email protected]:8080/p/a/t/h?query=string#hash');
console.log(URL.pathname.substring(URL.pathname.lastIndexOf('/')+1)); // "h"

And if that idea is considered safe enough for the appliance, we can do it plain:

var file = url.substring(url.lastIndexOf('/')+1).replace(/((\?|#).*)?$/,'');
                              /* hashes and query strings ----^  */

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.