Holen Sie sich alles nach dem Bindestrich in eine Zeichenfolge in Javascript

149

Was wäre der sauberste Weg, dies zu tun, der sowohl im IE als auch in Firefox funktioniert?

Meine Zeichenfolge sieht folgendermaßen aus: Sometext-20202

Jetzt können der 'Sometext' und die Ganzzahl nach dem Bindestrich unterschiedlich lang sein.

Sollte ich nur Teilzeichenfolge und Index von oder ist die andere Möglichkeit?

mrblah
quelle

Antworten:

279

Wie würde ich das machen:

// function you can use:
function getSecondPart(str) {
    return str.split('-')[1];
}
// use the function:
alert(getSecondPart("sometext-20202"));
artlung
quelle
62
Ist es nicht erwähnenswert, dass diese Funktion nicht funktioniert, wenn der String ist sometext-20202-303?
Istiaque Ahmed
17
@IstiaqueAhmed wäre es, wenn die Frage nicht speziell über ein ganz bestimmtes Format wäre: "Meine Zeichenfolge sieht so aus: Sometext-20202"
Artlung
7
Die Frage hatte, get everything after the dash in a string in javascriptwas in diesem Fall scheitern würde.
Artem Kalinchuk
108

Eine Lösung, die ich bevorzuge, wäre:

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

Wo slugwäre dein Ergebnis?

Ryan
quelle
1
Diese Lösung ist die beste, wenn Sie mit mehreren Trennzeichen arbeiten.
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
quelle
24
var testStr = "sometext-20202"
var splitStr = testStr.substring(testStr.indexOf('-') + 1);
Kanke
quelle
6

AFAIK, beide substring()und indexOf()werden sowohl von Mozilla als auch von IE unterstützt. Beachten Sie jedoch, dass substr () in früheren Versionen einiger Browser (insbesondere Netscape / Opera) möglicherweise nicht unterstützt wird.

Ihr Beitrag zeigt an, dass Sie bereits wissen, wie es geht, substring()und indexOf()daher veröffentliche ich kein Codebeispiel.

Cerebrus
quelle
Dies ist je nach Anwendung eine bessere Lösung als Split. Wenn Sie mehr als eine haben, kann dies zu unerwünschten Konsequenzen führen.
Trevorgrayson
20
string.substring (string.indexOf ('-') + 1)
trevorgrayson
indexOf ist in IE8 und darunter nicht vorhanden, obwohl Polyfills vorhanden sind.
Erik Honn
3

Sie können dies mit der integrierten RegExp (Muster [, Flags]) Factory Notation in js wie folgt tun:

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

In der obigen Code-Exec-Funktion wird ein Array mit zwei Elementen (["-20202", "20202"]) zurückgegeben, eines mit Bindestrich (-20202) und eines ohne Bindestrich (20202). Wählen Sie das zweite Element (Index 1).

Ekrami
quelle
2
myString.split('-').splice(1).join('-')
kcsoft
quelle
Es kann auch sein:myString.split('-').splice(-1).join('-')
Arkadiusz Wieczorek
0

Verwenden Sie einen regulären Ausdruck der Form: \ w- \ d + wobei a \ w ein Wort und \ d eine Ziffer darstellt. Sie werden nicht sofort funktionieren, also spielen Sie herum. Versuchen Sie dies .

dirkgently
quelle