2009-03-16 2 views
112

Мне нужно получить последний элемент разделенного массива с несколькими разделителями. Сепараторы являются запятыми и пространством. Если нет разделителей, он должен вернуть исходную строку.Получение последнего элемента массива разделенных строк

Если строка «как, вы делаете, сегодня?» он должен вернуться «сегодня»?

Если вход был «привет», выход должен быть «привет».

Как это сделать в JavaScript?

ответ

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

На данный момент pieces является массивом и pieces.length содержит размер массива так, чтобы получить последний элемент массива, нужно проверить pieces[pieces.length-1]. Если нет запятых или пробелов, он просто выводит строку, как она была дана.

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

Для всего есть однострочный вкладыш. :)

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

ааа, поп. Красиво сделано. :) –

+0

+1 ясно альтернативный – diEcho

+14

* правильный * ответ на вопрос;) – Stephen

3

И если вы не хотите, чтобы построить массив ...

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

Разбивка на английском языке:

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

ЗАМЕНИТЬ просто говорит заменить весь строка с материалом после последнего разделителя.

Итак, вы можете видеть, как это можно применить в целом. Обратите внимание, что исходная строка не изменяется.

25

Давая следующее:

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

работает ли это?

+8

Я не думаю, что pop() принимает аргументы. –

+0

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

+3

Но в общем случае '.split (','). pop()' работает для последнего элемента в строке, разделенной запятыми. Просто сказать, потому что я был введен в заблуждение от ужасного ответа Гуффа, я просто проигнорировал его, потому что не нуждался в регулярном выражении и думал, что трюк был там! : 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

Вы можете получить доступ к индексу массива непосредственно:

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

+2

Здравствуйте, tnong, добро пожаловать в SO! Я думаю, что этот ответ не учитывает разделитель пространства в соответствии с запросом в вопросе. –

+0

Этот ответ не поддерживает произвольную длину массива строк –

Смежные вопросы