Ottieni tutto dopo il trattino in una stringa in javascript


150

Quale sarebbe il modo più pulito per farlo che funzionerebbe sia in IE che in Firefox.

La mia stringa è simile al seguente: sometext-20202

Ora il 'sometext' e il numero intero dopo il trattino possono essere di lunghezza variabile.

Devo usare solo la sottostringa e l'indice o sono gli altri modi?

Risposte:


280

Come farei questo:

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

62
Non vale la pena ricordare che questa funzione non funzionerà se la stringa è sometext-20202-303?
Istiaque Ahmed,

17
@IstiaqueAhmed lo sarebbe se la domanda non riguardasse specificamente un formato molto specifico: "La mia stringa ha questo aspetto: sometext-20202"
artlung,

7
La domanda aveva get everything after the dash in a string in javascriptchi, in questo caso, avrebbe fallito.
Artem Kalinchuk,

108

Una soluzione che preferisco sarebbe:

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

Dove slugsarebbe il tuo risultato


1
Questa soluzione è la migliore se si lavora con più delimitatori.
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, entrambi substring()e indexOf()sono supportati sia da Mozilla che da IE. Tuttavia, si noti che substr () potrebbe non essere supportato su versioni precedenti di alcuni browser (in particolare Netscape / Opera).

Il tuo post indica che sai già come farlo utilizzando substring()e indexOf(), quindi non sto pubblicando un esempio di codice.


Questa è in realtà una soluzione migliore rispetto alla divisione, a seconda della tua applicazione, perché se ne hai più di una, potresti ottenere conseguenze indesiderate.
trevorgrayson,

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

indexOf non esiste in IE8 e precedenti, sebbene esistano polifillamenti.
Erik Honn,

3

Puoi farlo con RegExp (pattern [, flags]) predefinito Factory Notation in js in questo modo:

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

nel codice sopra la funzione exec restituirà un array con due elementi (["-20202", "20202"]) uno con trattino (-20202) e uno senza trattino (20202), dovresti scegliere il secondo elemento (indice 1)



0

Utilizzare un'espressione regolare del modulo: \ w- \ d + dove a \ w rappresenta una parola e \ d rappresenta una cifra. Non funzioneranno fuori dalla scatola, quindi gioca. Prova questo .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.