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.
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.
Voici un regex simple qui correspondra à tout après le dernier /
:
/[^/]*$
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('/'));
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 />");
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
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.