Obtenga todo después del guión en una cadena en javascript

150

¿Cuál sería la forma más limpia de hacer esto que funcionaría tanto en IE como en Firefox?

Mi cadena se ve así: sometext-20202

Ahora el 'algún texto' y el número entero después del guión pueden tener una longitud variable.

¿Debo usar la subcadena y el índice de o son las otras formas?

mrblah
fuente

Respuestas:

280

Cómo haría esto:

// function you can use:
function getSecondPart(str) {
    return str.split('-')[1];
}
// use the function:
alert(getSecondPart("sometext-20202"));
artlung
fuente
62
¿No vale la pena mencionar que esta función no funcionará si la cadena lo es sometext-20202-303?
Istiaque Ahmed
17
@IstiaqueAhmed sería si la pregunta no fuera específicamente sobre un formato muy específico: "Mi cadena se ve así: sometext-20202"
artículo
77
La pregunta tenía get everything after the dash in a string in javascriptcuál, en este caso, fallaría.
Artem Kalinchuk
108

Una solución que prefiero sería:

const str = 'sometext-20202';
const slug = str.split('-').pop();

Donde slugseria tu resultado

Ryan
fuente
1
Esta solución es la mejor si está trabajando con múltiples delimitadores.
Ethan Keiley
26
var the_string = "sometext-20202";
var parts = the_string.split('-', 2);

// After calling split(), 'parts' is an array with two elements:
// parts[0] is 'sometext'
// parts[1] is '20202'

var the_text = parts[0];
var the_num  = parts[1];
Sean Bright
fuente
24
var testStr = "sometext-20202"
var splitStr = testStr.substring(testStr.indexOf('-') + 1);
Kanke
fuente
6

AFAIK, ambos substring()y indexOf()son compatibles con Mozilla e IE. Sin embargo, tenga en cuenta que substr () podría no ser compatible con versiones anteriores de algunos navegadores (especialmente Netscape / Opera).

Su publicación indica que ya sabe cómo hacerlo usando substring()y indexOf(), por lo tanto, no estoy publicando una muestra de código.

Cerebro
fuente
En realidad, esta es una mejor solución que dividir, dependiendo de su aplicación, porque si tiene más de una, puede obtener consecuencias no deseadas.
trevorgrayson
20
string.substring (string.indexOf ('-') + 1)
trevorgrayson
indexOf no existe en IE8 y versiones inferiores, aunque existen polyfills.
Erik Honn
3

Puede hacerlo con la notación de fábrica incorporada RegExp (patrón [, banderas]) en js como este:

RegExp(/-(.*)/).exec("sometext-20202")[1]

en el código anterior, la función ejecutiva devolverá una matriz con dos elementos (["-20202", "20202"]) uno con guión (-20202) y otro sin guión (20202), debe elegir el segundo elemento (índice 1)

Ekrami
fuente
2
myString.split('-').splice(1).join('-')
kcsoft
fuente
También puede ser:myString.split('-').splice(-1).join('-')
Arkadiusz Wieczorek
0

Use una expresión regular de la forma: \ w- \ d + donde a \ w representa una palabra y \ d representa un dígito. No funcionarán de la caja, así que juega un poco. Intenta esto .

Dirkgently
fuente