34

How to get the filename from string-path in javascript?

Here is my code

var nameString = "/app/base/controllers/filename.js"; //this is the input path string

do something here to get only the filename

var name = ???   //this value should equal to filename.js
1

4 Answers 4

121

Try this:

   var nameString = "/app/base/controllers/filename.js";
   var filename = nameString.split("/").pop();
Sign up to request clarification or add additional context in comments.

7 Comments

Nice to see a simple, nonregex answer.
The -1 parameter isn't required (and is ignored in fact). developer.mozilla.org/en-US/docs/JavaScript/Reference/…
What if string was "/app/base/controllers"?
@javiniar.leonard you will get "controllers"
@Cooluhuru you need to use regex
|
7

I don't know why you'd want to us a regex to do this. Surely the following would be sufficient:

var nameString = "/app/base/controllers/filename.js";
var nameArray = nameString.split('/');
var name = nameArray[nameArray.length - 1];

2 Comments

One could conceivably use a regex, but I agree with you. Though a regex could be useful to parse out bad paths.
This really should be the answer, much more flexible.
1

Here one more detailed solution using Regular Expressions.

Alternative 1 (generic): Get a file name (whatever) from a string path.

const FILE_NAME_REGEX = /(.+)\/(.+)$/

console.log("/home/username/my-package/my-file1.ts".replace(FILE_NAME_REGEX, '$2'))

console.log("/home/username/my-package/my-file2.js".replace(FILE_NAME_REGEX, '$2'))

Alternative 2 (advanced): Get only a .ts file name from a string path.

const JS_PATH = "/home/username/my-package/my-file.spec.js"
const TS_PATH = "/home/username/my-package/my-file.spec.ts"

// RegExp accepts only `.ts` file names in lower case with optional dashes and dots
const TS_REGEX = /(.+)\/([a-z.-]+\.(ts))$/

// a. Get only the file name of a `.ts` path
console.log(TS_PATH.replace(TS_REGEX, '$2'))

// b. Otherwise it will return the complete path
console.log(JS_PATH.replace(TS_REGEX, '$2'))

Note: Additionally you can test first the regular expressions above in order to validate them before to getting the expected value.

TS_REGEX.test(TS_PATH)
// > true

TS_REGEX.test(JS_PATH)
// > false

More information at MDN - Regular Expressions

Comments

0

a pure regex solution: \/([^\\\/:*?\"<>|]+)$
you will get file name from group 1

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.