elimine la ruta completa, mantenga solo el nombre del archivo

2 minutos de lectura

Intentar eliminar la URL completa que se devuelve a imgurl: por lo general, devuelve algo como http://localhost/wordpress/wp-content/uploads/nombre de archivo.jpg
o http://localhost/wordpress/wp-content/uploads/images/filename.jpg

Me gustaría eliminar todo excepto filename.jpg y devolverlo a ahng_photos_upload_image. Elimina todo hasta la última barra diagonal. ¿Cómo puedo hacer eso con Jquery?

window.send_to_editor = function(html) {
imgurl = jQuery('img',html).attr('src');
jQuery('#ahng_photos_upload_image').val(imgurl);
tb_remove();
}

  • txt.substring(txt.lastIndexOf(“/”) + 1)

    – Kamyar Nazari

    19 de febrero de 2012 a las 21:22

avatar de usuario
Andy

No necesita jQuery para eso, simplemente el viejo JavaScript servirá 🙂

alert('http://localhost/wordpress/wp-content/uploads/filename.jpg'.split("https://stackoverflow.com/").pop());​​

En tu caso:

var filename = imgurl.split("https://stackoverflow.com/").pop();

  • Funciona de maravilla. Gracias. Tendré que hacer una búsqueda para ver cómo funcionan split() y pop().

    – usuario1219691

    19 de febrero de 2012 a las 23:15

  • @nevermind En realidad, las rutas en Linux son /. Están ` in windows. But it wouldn't matter anyway, since we're talking about URLs which are always /` y no caminos.

    – Andy

    29 de agosto de 2015 a las 19:53

  • @Andy si la ruta proviene de una URL, puede funcionar, pero cuando intenta cargar un archivo, el valor de la entrada sería algo así como: “C:\fakepath\filename.txt” (probado en mi localhost en Ubuntu en Chromium ). Entonces, por esa razón, personalmente prefiero la forma de expresión regular.

    usuario3845133

    30 de agosto de 2015 a las 9:24


puede usar una expresión regular para lograr esto …

var file = imgUrl.replace(/^.*[\\\/]/, '');

Ahora el archivo consistiría solo en el nombre del archivo ..

Si está bastante seguro de que las URL no tienen cosas divertidas como hashes o parámetros, una expresión regular como esta lo haría:

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

Además: no olvides declarar “imgurl” con vary deberías probablemente usar .prop() en vez de .attr() si su versión de jQuery es 1.6 o posterior:

var imgurl = jQuery('img', html).prop('src');

Además, jQuery convierte internamente la forma de dos argumentos de la función en esto:

var imgurl = jQuery(html).find('img').prop('src');

así que también podría codificarlo de esa manera.

Una opción más:

var filename = imgurl.substring(imgurl.lastIndexOf("https://stackoverflow.com/") + 1);

Demostración de JS Fiddle.

Aquí tienes

var filename = imgurl.split("https://stackoverflow.com/").slice(-1);

¡Buena suerte!

avatar de usuario
Comunidad

Prueba este:

imgurl.split("https://stackoverflow.com/").slice(-1);

Editar: Mira la versión de @Andy que usa el pop() siendo este último más rápido que slice(-1).

avatar de usuario
sdw

Tenga en cuenta que si no sabe si tiene barras inclinadas hacia adelante o hacia atrás, es mejor que use la versión RE de división:

"path".split(/[\/\\]/).slice(-1)

¿Ha sido útil esta solución?