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?

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"));

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


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];

24
var testStr = "sometext-20202"
var splitStr = testStr.substring(testStr.indexOf('-') + 1);

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.


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)



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 .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.