Comment puis-je tout attraper après le dernier trait de soulignement dans un nom de fichier?Comment puis-je tout attraper après le trait de soulignement dans un chemin de fichier avec JavaScript?
ex: 24235235adasd_4.jpg
dans 4.jpg
Merci encore!
Comment puis-je tout attraper après le dernier trait de soulignement dans un nom de fichier?Comment puis-je tout attraper après le trait de soulignement dans un chemin de fichier avec JavaScript?
ex: 24235235adasd_4.jpg
dans 4.jpg
Merci encore!
var end = "24235235adasd_4.jpg".match(/.*_(.*)/)[1];
Édition: Oups, le modificateur ungreedy était faux.
Édition 2: Après avoir exécuté un test de performance, c'est la méthode la plus lente. Ne l'utilisez pas;) Voici le benchmark et les résultats.
Benchmark:
var MAX = 100000, i = 0,
s = new Date(), e = new Date(),
str = "24235235ad_as___4.jpg",
methods = {
"Matching": function() { return str.match(/.*_(.*)/)[1]; },
"Substr": function() { return str.substr(str.lastIndexOf('_') + 1); },
"Split/pop": function() { return str.split('_').pop(); },
"Replace": function() { return str.replace(/.*_/,''); }
};
console.info("Each method over %d iterations", MAX);
for (var m in methods) {
if (!methods.hasOwnProperty(m)) { continue; }
i = 0;
s = new Date();
do {
methods[m]();
} while (++i<MAX);
e = new Date();
console.info(m);
console.log("Result: '%s'", methods[m]());
console.log("Total: %dms; average: %dms", +e - +s, (+e - +s)/MAX);
}
Résultats:
Each method over 100000 iterations
Matching
Result: '4.jpg'
Total: 1079ms; average: 0.01079ms
Substr
Result: '4.jpg'
Total: 371ms; average: 0.00371ms
Split/pop
Result: '4.jpg'
Total: 640ms; average: 0.0064ms
Replace
Result: '4.jpg'
Total: 596ms; average: 0.00596ms
Gordon Tucker's Substr/lastIndexOf est le plus rapide par un long shot.
+1 pour autocritique et référence –
Merci Tim! (15charfiller) –
Différentes implémentations JavaScript/ECMAScript effectueront ce test différemment. Par curiosité quel moteur a été utilisé pour les résultats ici? Il serait vraiment intéressant de voir s'il y avait des variations dans les résultats sur les autres moteurs. Merci d'avoir pris le temps de le faire! – mckamey
"24235235adasd_4.jpg".split('_').pop();
+1 Comme cela retourne tout le dernier trait de soulignement – Matt
+1 pour le code le plus lisible, et pour permettre l'entrée avec * non * traits de soulignement –
Lisible oui, mais toutes les autres réponses en dehors de mon propre travail avec ou sans traits de soulignement . –
var foo = '24235235adasd_4.jpg';
var bar = foo.substr(foo.lastIndexOf('_') + 1);
* Notez que pour vous cela ne marchera pas avec ces fichiers hors du commun qui ont un « _ » dans leur extension (par exemple, je l'ai vu certains qui sont nommés filename.tx_
)
+ 1 cela semble être le moyen le plus rapide de faire cette tâche. – user
Vous en avez un de trop en fermant ')'. –
+1 Ceci est la méthode la plus rapide. Voir ma réponse pour le benchmark. –
var end = filename.replace(/.*_/,'');
sans utiliser une regex:?) – Don
@Don, il y a deux réponses avec regexp et deux sans. Que pourrais-tu vouloir de plus? ;) –
Devrait être "après le trait de soulignement" dans le titre de la question? – Matchu