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
levi
  • 20,483
  • 7
  • 63
  • 71
001
  • 59,081
  • 87
  • 224
  • 333
  • possible duplicate of [How to get the file name from a full path using JavaScript?](http://stackoverflow.com/questions/423376/how-to-get-the-file-name-from-a-full-path-using-javascript) –  Mar 29 '15 at 19:52

4 Answers4

118

Try this:

   var nameString = "/app/base/controllers/filename.js";
   var filename = nameString.split("/").pop();
levi
  • 20,483
  • 7
  • 63
  • 71
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];
Brandon
  • 2,704
  • 1
  • 13
  • 7
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

Edric
  • 21,480
  • 12
  • 75
  • 86
joseluisq
  • 478
  • 1
  • 6
  • 18
0

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

godspeedlee
  • 672
  • 3
  • 7