web-dev-qa-db-fra.com

Regex pour correspondre au nom de fichier à la fin de l'URL

Ayant ce texte:

http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg

Et d’autres textes comme celui-ci où le dernier 1 peut être n’importe quel autre nombre et le dernier 44 peut être aussi tout autre nombre; j’ai besoin d’une expression régulière qui corresponde à /1t44.jpg. Tout ce que j'ai essayé jusqu'à présent (/.+?\.([^\.]+)$) correspond à la première barre oblique (//img.oo.com.au/prod/CRWWBGFWG/1t44.jpg).

J'utilise javascript donc tout ce qui fonctionne sur RegexPal devrait faire.

Merci d'avance.

25
Juan

Si vous voulez faire correspondre un nom de fichier avec une extension de fichier très spécifique, vous pouvez utiliser quelque chose comme ceci:

/\/\dt\d\d\.jpg$/

Cela correspond à:

a slash
followed by a digit
followed by the letter 't'
followed by two digits
followed by '.jpg' at the end of the string

Ou, si vous voulez juste le nom du fichier (quelle que soit la dernière barre oblique avec une extension de fichier), vous pouvez utiliser ceci:

/\/[^\/]+$/

Cela correspond à:

a slash
followed by one or more non-slash characters
at the end of the string

Dans votre exemple de chaîne de http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg, ces deux correspondront à /1t44.jpg. Le premier est évidemment beaucoup plus restrictif puisqu'il nécessite un format spécifique du nom de fichier. La seconde correspond à n'importe quel nom de fichier.


Autres choix Dans le développement de node.js, vous pouvez utiliser le module path et utiliser path.parse() pour diviser un chemin en différents composants.

Et, il existe diverses bibliothèques écrites pour le navigateur qui diviseront également un chemin dans ses composants.

28
jfriend00

Voici un regex simple qui correspondra à tout après le dernier /:

/[^/]*$
46
Scott Rippey

Comme le dit Johnsyweb, un express régulier n'est pas vraiment nécessaire ici. Autant que je sache, le moyen le plus rapide de procéder consiste à utiliser lastIndexOf et substr.

str.substr(str.lastIndexOf('/'));
9
Hemlock

Bien sûr, vous n'avez pas besoin d'utiliser une expression régulière pour split une chaîne et pop la dernière partie :

var str="http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg";
var parts = str.split("/");
document.write(parts.pop() + "<br />");
3
Johnsyweb

Basé sur la réponse de Scott, essayez ceci: (JavaScript)

var url = "http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg";

var path           = url.replace(/(.*)([\\\/][^\\\/]*$)/, "$1" );

var lastElement    = url.replace(/(.*)([\\\/][^\\\/]*$)/, "$2" );

Cela peut également correspondre au chemin de fichier Windows/Nix, pour extraire le nom ou le chemin du fichier:

c:\Program Files\test.js => c:\Program Files

c:\Program Files\test.js => \test.js
0
Liam Ray

Ceci est pour Java sur une machine Linux. Il récupère la dernière partie d'un chemin de fichier afin de pouvoir l'utiliser pour verrouiller un fichier.

// String to be scanned to find the pattern.
String pattern = ".*?([^/.]+)*$";

// Create a Pattern object
Pattern r = Pattern.compile(pattern);

// Now create matcher object.
Matcher match = r.matcher("/usr/local/Java/bin/keystore");

/**
* Now you have two matches
* #0    /usr/local/Java/bin/keystore
* #1    keystore
*/

String fileLock = "";

if (match.find()) {
    fileLock = match.group(1) + ".lock";
}

Un peu différent de la question initiale, je sais. Mais j'espère que cela aidera d'autres personnes aux prises avec le même problème que moi.

Partager et profiter.

0
mycowan