2009-03-16 11 views
112

Potrzebuję uzyskać ostatni element podzielonej tablicy z wieloma separatorami. Separatory są przecinkami i spacją. Jeśli nie ma separatorów, powinien zwrócić oryginalny ciąg znaków.Uzyskiwanie ostatniego elementu podzielonej tablicy łańcuchów

Jeśli ciąg znaków brzmi "jak, co robisz, dzisiaj?" powinien powrócić "dzisiaj?"

Jeśli wejściem było "cześć", wyjście powinno być "cześć".

Jak mogę to zrobić w JavaScript?

Odpowiedz

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

W tym momencie pieces jest tablicą i pieces.length zawiera rozmiar tablicy, tak aby uzyskać ostatni element tablicy, sprawdzając pieces[pieces.length-1]. Jeśli nie ma przecinków ani spacji, po prostu wypisze ciąg znaków, tak jak został podany.

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

Istnieje jeden liniowiec na wszystko. :)

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

aaa, pop. Ładnie wykonane. :) –

+0

+1 wyczyść alternatywę – diEcho

+14

* poprawna * odpowiedź na pytanie;) – Stephen

3

A jeśli nie chcemy skonstruować tablicę ...

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

Podział w języku angielskim brzmi:

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

wymienić tylko mówi wymienić cały ciąg znaków z materiałem po ostatnim separatorze.

Dzięki temu można zobaczyć, jak można to ogólnie zastosować. Uwaga: oryginalny ciąg nie jest modyfikowany.

25

Nadanie następujące:

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

Czy to działa?

+8

Nie sądzę, że pop() przyjmuje argumenty. –

+0

@GraceShao: tak. https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop – aymericbeaumet

+3

Ale, ogólnie rzecz biorąc, '.split (','). pop()' działa dla ostatniego elementu ciągu oddzielonego przecinkami. Powiedziałem tylko, że zostałem wprowadzony w błąd przez niesamowitą odpowiedź Guffy, po prostu zlekceważyłem ją, ponieważ nie potrzebowałem regexu i myślałem, że ta sztuczka istnieje! : 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

Możesz uzyskać dostęp do indeksu tablicy bezpośrednio:

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

+2

Witaj tnong, witamy w SO! Myślę, że ta odpowiedź nie bierze pod uwagę separatora przestrzeni, jak tego żądano w pytaniu. –

+0

Ta odpowiedź nie obsługuje arbitralnej długości tablicy napisów –

Powiązane problemy