2009-03-16 22 views
112

Necesito obtener el último elemento de una matriz dividida con múltiples separadores. Los separadores son comas y espacio. Si no hay separadores, debe devolver la cadena original.Obteniendo el último elemento de una matriz de cadenas divididas

Si la cadena es "¿cómo estás? ¿Hoy?" debería regresar "hoy?"

Si la entrada fue "hola", la salida debería ser "hola".

¿Cómo puedo hacer esto en JavaScript?

Respuesta

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

En este punto, pieces es una matriz y pieces.length contiene el tamaño de la matriz de modo de obtener el último elemento de la matriz, se comprueba pieces[pieces.length-1]. Si no hay comas o espacios, simplemente emitirá la cadena como se le dio.

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

Hay un trazador de líneas para todo. :)

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

Aaah, pop. Bien hecho. :) –

+0

+1 alternativa clara – diEcho

+14

la * correcta * respuesta a la pregunta;) – Stephen

3

Y si usted no quiere construir una matriz ...

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

El desglose en Inglés es:

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

La sustituir simplemente dice sustituir la totalidad cuerda con las cosas después del último separador.

Para que pueda ver cómo esto se puede aplicar en general. Tenga en cuenta que la cadena original no se modifica.

25

Dando el siguiente:

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

Cómo funciona?

+8

No creo que pop() tenga argumentos. –

+0

@ GraciaShao: sí. https: //developer.mozilla.org/es-ES/docs/Web/JavaScript/Reference/Global_Objects/Array/pop – aymericbeaumet

+3

Pero, genéricamente hablando, '.split (','). pop()' funciona para el último elemento en una cadena separada por comas. Solo digo porque me sorprendió la asombrosa respuesta de Guffa, simplemente la ignoré porque no necesitaba una expresión regular y pensé que el truco estaba allí. : 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

Se puede acceder al índice de matriz directa:

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

+2

Hola tnong, bienvenido a SO! Creo que esta respuesta no tiene en cuenta el separador de espacios como se solicita en la pregunta. –

+0

Esta respuesta no admite la longitud arbitraria de la matriz de cadenas –

Cuestiones relacionadas