How to extract extension from filename string in Javascript? [duplicate]
A variant that works with all of the following inputs:
"file.name.with.dots.txt"
"file.txt"
"file"
""
null
undefined
would be:
var re = /(?:\.([^.]+))?$/;
var ext = re.exec("file.name.with.dots.txt")[1]; // "txt"
var ext = re.exec("file.txt")[1]; // "txt"
var ext = re.exec("file")[1]; // undefined
var ext = re.exec("")[1]; // undefined
var ext = re.exec(null)[1]; // undefined
var ext = re.exec(undefined)[1]; // undefined
Explanation
(?: # begin non-capturing group \. # a dot ( # begin capturing group (captures the actual extension) [^.]+ # anything except a dot, multiple times ) # end capturing group )? # end non-capturing group, make it optional $ # anchor to the end of the string
I personally prefer to split the string by .
and just return the last array element :)
var fileExt = filename.split('.').pop();
If there is no .
in filename you get the entire string back.
Examples:
'some_value' => 'some_value'
'.htaccess' => 'htaccess'
'../images/something.cool.jpg' => 'jpg'
'http://www.w3schools.com/jsref/jsref_pop.asp' => 'asp'
'http://stackoverflow.com/questions/680929' => 'com/questions/680929'
Use the lastIndexOf
method to find the last period in the string, and get the part of the string after that:
var ext = fileName.substr(fileName.lastIndexOf('.') + 1);
I would recommend using lastIndexOf() as opposed to indexOf()
var myString = "this.is.my.file.txt"
alert(myString.substring(myString.lastIndexOf(".")+1))
Better to use the following; Works always!
var ext = fileName.split('.').pop();
This will return the extension without a dot prefix. You can add "." + ext to check against the extensions you wish to support!