Ottieni il valore di una stringa dopo una barra in JavaScript


112

Sto già provando da più di un'ora e non riesco a capire il modo giusto per farlo, anche se probabilmente è abbastanza facile:

Ho qualcosa del genere: foo/bar/test.html

Vorrei usare jQuery per estrarre tutto dopo l'ultimo /. Nell'esempio sopra l'output sarebbe test.html.

Immagino che possa essere fatto usando substre indexOf(), ma non riesco a trovare una soluzione funzionante.

Risposte:


243

Almeno tre modi:

Un'espressione regolare:

var result = /[^/]*$/.exec("foo/bar/test.html")[0];

... che dice "prendi la serie di caratteri che non contengono una barra" ( [^/]*) alla fine della stringa ( $). Quindi acquisisce i caratteri corrispondenti dall'oggetto match restituito indicizzando in esso ( [0]); in un oggetto match, la prima voce è l'intera stringa corrispondente. Non c'è bisogno di gruppi di cattura.

Esempio dal vivo

Utilizzando lastIndexOfe substring:

var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);

lastIndexOffa quello che sembra: trova l'indice dell'ultima occorrenza di un carattere (beh, stringa) in una stringa, restituendo -1 se non trovato. Nove volte su dieci probabilmente vorrai controllare quel valore di ritorno ( if (n !== -1)), ma in quanto sopra visto che stiamo aggiungendo 1 ad esso e chiamando sottostringa, finiremmo per fare str.substring(0)che restituisce solo la stringa.

utilizzando Array#split

Sudhir e Tom Walters hanno coperto questo qui e qui , ma solo per completezza:

var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();

split divide una stringa usando il delimitatore dato, restituendo un array.

La soluzione lastIndexOf/ substringè probabilmente la più efficiente (anche se bisogna sempre stare attenti a dire qualcosa su JavaScript e sulle prestazioni, poiché i motori variano in modo così radicale l'uno dall'altro), ma a meno che non lo si faccia migliaia di volte in un ciclo, non Non importa e mi impegno per la chiarezza del codice.


1
Come adatteresti questo per restituire la stringa prima della barra finale? (
Vale a

28

Non hai bisogno di jQuery e ci sono molti modi per farlo, ad esempio:

var parts = myString.split('/');
var answer = parts[parts.length - 1];

Dove myString contiene la tua stringa.


3
+1 (per lavorare) sottolineando che jQuery non è la soluzione definitiva per i problemi di javascript.
Andrew Jackman

1
Questa è una soluzione bacata, prova cosa succede se aggiungi la barra allo slug? Restituisce 0. E cosa succede non c'è lumaca? - restituisce NaN! WTF? codice
errato

1) La domanda era relativa a un input che non era nullo 2) L'input era correlato a input che terminavano con nomi di file (senza barre) 3) La risposta accettata è davvero una soluzione molto migliore, da qui i numerosi voti positivi 4) Puoi aggiungere la tua soluzione
Tom Walters

12
var str = "foo/bar/test.html";
var lastSlash = str.lastIndexOf("/");
alert(str.substring(lastSlash+1));

9

Provare;

var str = "foo / bar / test.html";
var tmp = str.split ("/");
alert (tmp.pop ());

5

Quando so che la stringa sarà ragionevolmente corta, utilizzo la seguente riga ... (ricordati di evitare i backslash)

// if str is C:\windows\file system\path\picture name.jpg
alert( str.split('\\').pop() );

avviso si apre con picture name.jpg


2
String path ="AnyDirectory/subFolder/last.htm";
int pos = path.lastIndexOf("/") + 1;

path.substring(pos, path.length()-pos) ;

Ora hai last.htm nella stringa del percorso.


1

peso leggero

string.substring(start,end)

dove

start = Required. La posizione da cui iniziare l'estrazione. Il primo carattere è all'indice 0`.

end = Optional. La posizione (fino a, ma non inclusa) in cui terminare l'estrazione. Se omesso, estrae il resto della stringa.

    var string = "var1/var2/var3";

    start   = string.lastIndexOf('/');  //console.log(start); o/p:- 9
    end     = string.length;            //console.log(end);   o/p:- 14

    var string_before_last_slash = string.substring(0, start);
    console.log(string_before_last_slash);//o/p:- var1/var2

    var string_after_last_slash = string.substring(start+1, end);
    console.log(string_after_last_slash);//o/p:- var3

O

    var string_after_last_slash = string.substring(start+1);
    console.log(string_after_last_slash);//o/p:- var3

1

jquery:

var afterDot = value.substr(value.lastIndexOf('_') + 1);

Javascript:

var myString = 'asd/f/df/xc/asd/test.jpg'
var parts    = myString.split('/');
var answer   = parts[parts.length - 1];
console.log(answer);

Sostituisci "_" || "/" secondo le tue necessità


1

Come richiesto nella domanda:

var string1= "foo/bar/test.html";
  if(string1.contains("/"))
  {
      var string_parts = string1.split("/");
    var result = string_parts[string_parts.length - 1];
    console.log(result);
  }  

e per la domanda posta sull'URL (richiesta una sola occorrenza di "="):
[ http://stackoverflow.com/questions/24156535/how-to-split-a-string-after-a-particular-character-in -jquery] [1]

var string1= "Hello how are =you";
  if(string1.contains("="))
  {
      var string_parts = string1.split("=");
    var result = string_parts[string_parts.length - 1];
    console.log(result);
  }

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.