Pobierz wszystko po myślniku w ciągu znaków w javascript

150

Jaki byłby najczystszy sposób na zrobienie tego, który działałby zarówno w przeglądarce IE, jak i Firefox.

Mój ciąg wygląda tak: coś, co jest-20202

Teraz „tekst” i liczba całkowita po myślniku mogą mieć różną długość.

Czy powinienem po prostu użyć podciągu i indeksu, czy jest na inne sposoby?

mrblah
źródło

Odpowiedzi:

280

Jak bym to zrobił:

// function you can use:
function getSecondPart(str) {
    return str.split('-')[1];
}
// use the function:
alert(getSecondPart("sometext-20202"));
artlung
źródło
62
Czy nie warto wspomnieć, że ta funkcja nie będzie działać, jeśli ciąg znaków jest sometext-20202-303?
Istiaque Ahmed
17
@IstiaqueAhmed byłoby, gdyby pytanie nie dotyczyło konkretnego formatu: „Mój ciąg wygląda tak: coś, co jest-20202”
artlung
7
Pojawiło się pytanie, get everything after the dash in a string in javascriptktóre w tym przypadku zakończy się niepowodzeniem.
Artem Kalinchuk
108

Preferowanym przeze mnie rozwiązaniem byłoby:

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

Gdzie slugbyłby twój wynik

Ryan
źródło
1
To rozwiązanie jest najlepsze, jeśli pracujesz z wieloma ogranicznikami.
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
źródło
24
var testStr = "sometext-20202"
var splitStr = testStr.substring(testStr.indexOf('-') + 1);
Kanke
źródło
6

AFAIK, oba substring()i indexOf()są obsługiwane przez Mozillę i IE. Należy jednak pamiętać, że funkcja substr () może nie być obsługiwana we wcześniejszych wersjach niektórych przeglądarek (szczególnie Netscape / Opera).

Twój post wskazuje, że już wiesz, jak to zrobić za pomocą substring()i indexOf(), więc nie wysyłam próbki kodu.

Cerebrus
źródło
W rzeczywistości jest to lepsze rozwiązanie niż split, w zależności od aplikacji, ponieważ jeśli masz więcej niż jedną - możesz mieć niepożądane konsekwencje.
trevorgrayson
20
string.substring (string.indexOf ('-') + 1)
trevorgrayson
indexOf nie istnieje w IE8 i starszych, chociaż istnieją polyfills.
Erik Honn
3

Możesz to zrobić za pomocą wbudowanego RegExp (wzorzec [, flagi]) Notacja fabryczna w js w następujący sposób:

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

w powyższym kodzie funkcja exec zwróci tablicę z dwoma elementami (["-20202", "20202"]) jednym z łącznikiem (-20202) i jednym bez łącznika (20202), należy wybrać drugi element (indeks 1)

Ekrami
źródło
2
myString.split('-').splice(1).join('-')
kcsoft
źródło
Może to być również:myString.split('-').splice(-1).join('-')
Arkadiusz Wieczorek
0

Użyj wyrażenia regularnego w postaci: \ w- \ d +, gdzie a \ w oznacza słowo, a \ d oznacza cyfrę. Nie będą działać po wyjęciu z pudełka, więc pobaw się. Spróbuj tego .

dirkgently
źródło