2012-05-26 20 views
42

Estoy tratando de realizar la acción siguiente en una cadena:eliminar todo antes de la última aparición de un caracter

  • Encuentra la última aparición del personaje "/";
  • eliminar todo antes de ese personaje;
  • devolver los restos de la cadena;

Para ser más explícitos, vamos a decir que tengo la siguiente cadena:

var string = "/Roland/index.php"; // Which is a result of window.location.pathname 

Ahora lo que necesito para extraer de ella es todo, pero la página real, algo como esto:

var result = "index.php" // Which is what I need to be returned 

Por supuesto, eso es solo un ejemplo, porque obviamente tendré páginas diferentes, pero se aplican los mismos principios.

Me preguntaba si alguien podría ayudarme con una solución. Probé las próximas acciones pero sin éxito:

var location = window.location.pathname; 
var result = location.substring(location.lastIndexOf["/"]); 
+1

Usted estuvo cerca. 'lastIndexOf' es una función y no puede anular' location' si se trata de una variable global. Entonces debería ser: 'loc.substring (loc.lastIndexOf ("/"))' y dado que no desea incluir la barra en sí: 'loc.substring (loc.lastIndexOf ("/") + 1)' . –

Respuesta

67

Tiene la idea correcta, simplemente reemplace los paréntesis con paréntesis.

var string = "/Roland/index.php"; 
var result = string.substring(string.lastIndexOf("/") + 1); 

Aquí se muestra un ejemplo en jsfiddle y aquí es una explicación del método .lastIndexOf() en el Mozilla Developer Network.

+0

... y paréntesis incorrectos. : p – Amadan

+0

Oh, no he notado que :) – Roland

+6

Eso eliminaría todo * después * de la última ocurrencia. OP quiere eliminar todo * antes *. En realidad debería ser 'location.substring (location.lastIndexOf ("/") + 1)'. –

6

dividir la cadena en una matriz de / y .pop() fuera el último elemento. Tenga en cuenta que primero tendrá que quitar una barra inclinada si la hay.

var locationstring = window.location.pathname; 
// replace() the trailing/with nothing, split on the remaining /, and pop off the last one 
console.log(locationstring.replace(/\/$/, "").split('/').pop()); 

Si en el caso de una URL como /path/stuff/here/ donde usted tiene la arrastra /, si ese caso debe devolver una cadena vacía en lugar de here, modificar lo anterior para eliminar el .replace() de la cadena de llamadas. Supuse que querría el último componente independientemente de una barra inclinada, pero puede haberse asumido incorrectamente.

console.log(locationstring.split('/').pop()); 
+0

Creo que mi solución es más limpia, pero en cualquier caso necesitaría volver a unir esa matriz en "/" o terminaría con piezas sin /. –

+0

Prefiero no usar '.pop()' :) – Roland

+0

@Dr. Dredel, el OP, no necesita el resto de la cadena, solo la última parte, así que no hay necesidad de juntarla de nuevo –

8

Personalmente me gustaría usar una expresión regular:

var result = string.replace(/^.*\/(.*)$/, "$1"); 

Si está familiarizado con las expresiones regulares (y que debería ser si no :-) entonces no es tan extraño aspecto, ya que es cuando No estoy familiarizado.

La ^ líder obliga a esta expresión regular a "anclar" la coincidencia al comienzo de la cadena. El \/ coincide con un solo carácter / (el \ consiste en evitar que el / confunda el analizador de expresiones regulares). Entonces (.*)$ coincide con todo lo demás desde / hasta el final de la cadena. La inicial .* tragará todo lo que pueda, incluidos / caracteres antes de la última. El texto de reemplazo, "$1", es una forma especial que significa "el contenido del primer grupo coincidente".Esta expresión regular tiene un grupo, formado por los paréntesis alrededor del último .* (en (.*)$). Eso será todo después de la última /, por lo que el resultado general es que toda la cadena se reemplaza por eso. (Si el patrón no coincide porque no hay ningún / caracteres, no pasará nada.)

+0

No, estoy familiarizado con él, lo estoy usando en PHP pero menos en JS – Roland

2
var result = /\/([^\/]*)$/.exec(location)[1]; 

//"remove-everything-before-the-last-occurrence-of-a-character#10767835" 

Nota: location aquí es el window.location, no su var location.

0
var string = "/Roland/index.php"; 
var result = string.substring(0, string.lastIndexOf("/") + 0); 
Cuestiones relacionadas