/^(.+)(\.[^ .]+)?$/
modèle Au-dessus est faux - il inclura toujours l'extension aussi. C'est à cause du fonctionnement du moteur de javascript regex. Le jeton est (\.[^ .]+)
en option si le moteur correspondra avec succès la chaîne entière avec (.+)
http://cl.ly/image/3G1I3h3M2Q0M
Voici ma solution regexp testé.
Le modèle correspondra filenameNoExt avec/sans extension dans le chemin, en respectant les slash et les séparateurs de barre oblique inverse
var path = "c:\some.path/subfolder/file.ext"
var m = path.match(/([^:\\/]*?)(?:\.([^ :\\/.]*))?$/)
var fileName = (m === null)? "" : m[0]
var fileExt = (m === null)? "" : m[1]
de dissection du motif ci-dessus:
([^:\\/]*?) // match any character, except slashes and colon, 0-or-more times,
// make the token non-greedy so that the regex engine
// will try to match the next token (the file extension)
// capture the file name token to subpattern \1
(?:\. // match the '.' but don't capture it
([^ :\\/.]*) // match file extension
// ensure that the last element of the path is matched by prohibiting slashes
// capture the file extension token to subpattern \2
)?$ // the whole file extension is optional
http://cl.ly/image/3t3N413g3K09
http://www.gethifi.com/tools/regex
Cela couvrira tous les cas qui ont été mentionnés par @RogerPate mais y compris les chemins complets aussi
Pensez également à des choses comme 'a.longthingrighthereattheend' ou' .ext' & 'file.'. Peut-être vérifier avec '/ (. *) \. [^.] {1,10} $ /'. En fait, utilisez simplement 'pathinfo()'. – Xeoncross
Une solution presque parfaite mais, si vous voulez éviter le piège de noms de fichiers comme .htaccess (commence avec une période, mais n'a pas d'extension), comme Roger Pate, il suffit de remplacer le premier astérisque par un signal plus, comme suit: (. +) \. [^.] + $ – aldemarcalazans