Obtenez tout après le tiret dans une chaîne en javascript


150

Quelle serait la manière la plus propre de faire cela qui fonctionnerait à la fois dans IE et Firefox.

Ma chaîne ressemble à ceci: Sometext-20202

Désormais, le «quelque chose» et l'entier après le tiret peuvent être de longueur variable.

Dois-je simplement utiliser la sous-chaîne et l'index ou est-ce les autres moyens?

Réponses:


280

Comment je ferais cela:

// function you can use:
function getSecondPart(str) {
    return str.split('-')[1];
}
// use the function:
alert(getSecondPart("sometext-20202"));

62
Ne vaut-il pas la peine de mentionner que cette fonction ne fonctionnera pas si la chaîne l'est sometext-20202-303?
Istiaque Ahmed

17
@IstiaqueAhmed ce serait si la question ne portait pas spécifiquement sur un format très spécifique: "Ma chaîne ressemble à ceci: Sometext-20202"
artlung

7
La question avait get everything after the dash in a string in javascriptqui, dans ce cas, échouerait.
Artem Kalinchuk

108

Une solution que je préfère serait:

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

slugserait ton résultat


1
Cette solution est la meilleure si vous travaillez avec plusieurs délimiteurs.
Ethan Keiley le

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, les deux substring()et indexOf()sont pris en charge par Mozilla et IE. Cependant, notez que substr () peut ne pas être pris en charge sur les versions antérieures de certains navigateurs (en particulier Netscape / Opera).

Votre message indique que vous savez déjà comment le faire en utilisant substring()et indexOf(), donc je ne poste pas d'exemple de code.


C'est en fait une meilleure solution que la scission, en fonction de votre application, car si vous en avez plus d'une, vous risquez d'avoir des conséquences indésirables.
trevorgrayson le

20
string.substring (string.indexOf ('-') + 1)
trevorgrayson

indexOf n'existe pas dans IE8 et les versions antérieures, bien que des polyfills existent.
Erik Honn

3

Vous pouvez le faire avec RegExp intégré (pattern [, flags]) Factory Notation dans js comme ceci:

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

dans la fonction d'exécution du code ci-dessus retournera un tableau avec deux éléments (["-20202", "20202"]) un avec tiret (-20202) et un sans tiret (20202), vous devriez choisir le deuxième élément (index 1)



0

Utilisez une expression régulière de la forme: \ w- \ d + où a \ w représente un mot et \ d représente un chiffre. Ils ne fonctionneront pas immédiatement, alors jouez. Essayez ceci .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.