2009-03-16 3 views
112

Ho bisogno di ottenere l'ultimo elemento di una matrice divisa con più separatori. I separatori sono virgole e spazio. Se non ci sono separatori, dovrebbe restituire la stringa originale.Ottenere l'ultimo elemento di una matrice di stringa divisa

Se la stringa è "come, stai facendo, oggi?" dovrebbe tornare "oggi?"

Se l'input era "ciao", l'output dovrebbe essere "ciao".

Come posso farlo in JavaScript?

risposta

74
var str = "hello,how,are,you,today?"; 
var pieces = str.split(/[\s,]+/); 

A questo punto, pieces è un array e pieces.length contiene la dimensione della matrice in modo da ottenere l'ultimo elemento dell'array, si controlla pieces[pieces.length-1]. Se non ci sono virgole o spazi, verrà semplicemente emessa la stringa come è stata data.

alert(pieces[pieces.length-1]); // alerts "today?" 
529

C'è un one-liner per tutto. :)

var output = input.split(/[, ]+/).pop(); 
+0

Aaah, pop. Ben fatto. :) –

+0

+1 clear alternative – diEcho

+14

la * corretta * risposta alla domanda;) – Stephen

3

E se non si vuole costruire una matrice ...

var str = "how,are you doing, today?"; 
var res = str.replace(/(.*)([, ])([^, ]*$)/,"$3"); 

La ripartizione in inglese è:

/(anything)(any separator once)(anything that isn't a separator 0 or more times)/ 

Sostituisci dice solo sostituire l'intero stringa con la roba dopo l'ultimo separatore.

Così puoi vedere come questo può essere applicato in generale. Nota che la stringa originale non è stata modificata.

25

Dare il seguente:

var item = "one,two"; 
var lastItem = item.split(",").pop(-1); 

funziona?

+8

Non penso che pop() prenda argomenti. –

+0

@GraceShao: sì. https: //developer.mozilla.org/it-it/docs/Web/JavaScript/Riferimento/Global_Objects/Array/pop – aymericbeaumet

+3

Ma, in generale, '.split (','). pop()' funziona per l'ultimo elemento su una stringa separata da virgole. Dico solo che sono stato ingannato dalla fantastica risposta di Guffa, l'ho semplicemente ignorato perché non aveva bisogno di un'espressione regolare e pensavo che il trucco fosse lì! : P – cregox

0
var title = 'fdfdsg dsgdfh dgdh dsgdh tyu hjuk yjuk uyk hjg fhjg hjj tytutdfsf sdgsdg dsfsdgvf dfgfdhdn dfgilkj,n, jhk jsu wheiu sjldsf dfdsf hfdkdjf dfhdfkd hsfd ,dsfk dfjdf ,yier djsgyi kds'; 
var shortText = $.trim(title).substring(1000, 150).split(" ").slice(0, -1).join(" ") + "...More >>"; 
0

È possibile accedere al indice di matrice direttamente:

var csv = 'zero,one,two,three'; csv.split(',')[0]; //result: zero csv.split(',')[3]; //result: three

+2

Ciao a tutti, benvenuti a SO! Penso che questa risposta non tenga conto del separatore di spazi come richiesto nella domanda. –

+0

Questa risposta non supporta la lunghezza dell'array di stringhe arbitrario –