Obter tudo após o traço em uma string em javascript

150

Qual seria a maneira mais limpa de fazer isso que funcionaria no IE e no Firefox.

Minha string fica assim: sometext-20202

Agora, o 'sometext' e o número inteiro após o traço podem ter diferentes tamanhos.

Devo apenas usar substring e índice de ou são as outras maneiras?

mrblah
fonte

Respostas:

280

Como eu faria isso:

// function you can use:
function getSecondPart(str) {
    return str.split('-')[1];
}
// use the function:
alert(getSecondPart("sometext-20202"));
artlung
fonte
62
Não vale a pena mencionar que essa função não funcionará se a string for sometext-20202-303?
Istiaque Ahmed
17
@IstiaqueAhmed seria se a questão não era especificamente sobre um formato muito específico: "As minhas cordas parecido com este: sometext-20202"
artlung
7
A questão tinha get everything after the dash in a string in javascriptque, neste caso, falharia.
Artem Kalinchuk
108

Uma solução que eu prefiro seria:

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

Onde slugseria o seu resultado

Ryan
fonte
1
Essa solução é a melhor se você estiver trabalhando com vários 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
fonte
24
var testStr = "sometext-20202"
var splitStr = testStr.substring(testStr.indexOf('-') + 1);
Kanke
fonte
6

AFAIK, ambos substring()e indexOf()são suportados pelo Mozilla e IE. No entanto, observe que substr () pode não ser suportado em versões anteriores de alguns navegadores (especialmente Netscape / Opera).

Sua postagem indica que você já sabe como fazê-lo usando substring()e indexOf(), portanto, não estou postando uma amostra de código.

Cerebrus
fonte
Na verdade, essa é uma solução melhor que a dividida, dependendo da sua aplicação, porque se você tiver mais de uma, poderá obter consequências indesejadas.
trevorgrayson
20
String.substring (String.indexOf ( '-') + 1)
trevorgrayson
indexOf não existe no IE8 e abaixo, embora existam polyfills.
Erik Honn
3

Você pode fazer isso com RegExp interno (padrão [, flags]) Factory Notation em js como este:

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

na função code exec acima, retornará uma matriz com dois elementos (["-20202", "20202"]), um com hífen (-20202) e outro sem hífen (20202); você deve escolher o segundo elemento (índice 1)

Ekrami
fonte
2
myString.split('-').splice(1).join('-')
kcsoft
fonte
Também pode ser:myString.split('-').splice(-1).join('-')
Arkadiusz Wieczorek
0

Use uma expressão regular do formato: \ w- \ d + em que a \ w representa uma palavra e \ d representa um dígito. Eles não funcionarão imediatamente, então brinque. Tente isso .

dirkgently
fonte