Reputation: 1128
I want to extract the second "file extension" of a file name so:
/Users/path/my-path/super.lol.wtf/main.config.js
What I need is:
.config.js
What would be totally awesome if I got an array with 2 strings in return:
var output = ['main', '.config.js'];
What I have tried:
^(\d+\.\d+\.)
But that ain't working.
Thanks
Upvotes: 6
Views: 5684
Reputation: 240938
You could use the following:
([^\/.\s]+)(\.[^\/\s]+)$
([^\/.\s]+)
- Capturing group excluding the characters /
and .
literally as well as any white space character(s) one or more times.
(\.[^\/\s]+)
- Similar to the expression above; capturing group starting with the .
character literally; excluding the characters /
and .
literally as well as any white space character(s) one or more times.
$
- End of a line
Alternatively, you could also use the following:
(?:.*\/|^)([^\/.\s]+)(\.[^\/\s]+)$
(?:.*\/|^)
- Same as the expression above, except this will narrow the match down to reduce the number of steps. It's a non-capturing group that will either match the beginning of the line or at the /
character.The first expression is shorter, but the second one has better performance.
Both expressions would match the following:
['main', '.config.js']
In each of the following:
/Users/path/my-path/some.other.ext/main.config.js
some.other.ext/main.config.js
main.config.js
Upvotes: 6
Reputation: 3502
Here is what you need:
(?:\/?(?:.*?\/)*)([^.]+)*\.([^.]+\.[^.]+)$
(?:
means detect and ignore,[^.]+
means anything except .
.*?
means pass until last /
Check Here
Upvotes: 3