Dapatkan semuanya setelah tanda hubung dalam string dalam javascript

150

Apa yang akan menjadi cara terbersih untuk melakukan ini yang akan bekerja di IE dan firefox.

Tali saya terlihat seperti ini: sometext-20202

Sekarang 'somethingext' dan integer setelah dasbor dapat memiliki panjang yang bervariasi.

Haruskah saya hanya menggunakan substring dan indeks atau cara lain?

mrblah
sumber

Jawaban:

280

Bagaimana saya akan melakukan ini:

// function you can use:
function getSecondPart(str) {
    return str.split('-')[1];
}
// use the function:
alert(getSecondPart("sometext-20202"));
artlung
sumber
62
Bukankah pantas menyebutkan bahwa fungsi ini tidak akan berfungsi jika string itu sometext-20202-303?
Istiaque Ahmed
17
@IstiaqueAhmed akan jika pertanyaannya tidak secara spesifik tentang format yang sangat spesifik: "String saya terlihat seperti ini: somethingext-20202"
artlung
7
Pertanyaannya memang memiliki get everything after the dash in a string in javascriptyang, dalam hal ini, akan gagal.
Artem Kalinchuk
108

Solusi yang saya sukai adalah:

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

Di mana slughasil Anda

Ryan
sumber
1
Solusi ini adalah yang terbaik jika Anda bekerja dengan banyak pembatas.
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
sumber
24
var testStr = "sometext-20202"
var splitStr = testStr.substring(testStr.indexOf('-') + 1);
Kanke
sumber
6

AFAIK, keduanya substring()dan indexOf()didukung oleh Mozilla dan IE. Namun, perhatikan bahwa substr () mungkin tidak didukung pada versi sebelumnya dari beberapa browser (khususnya Netscape / Opera).

Posting Anda menunjukkan bahwa Anda sudah tahu cara melakukannya menggunakan substring()dan indexOf(), jadi saya tidak memposting sampel kode.

Cerebrus
sumber
Ini sebenarnya solusi yang lebih baik daripada pemecahan, tergantung pada aplikasi Anda, karena jika Anda memiliki lebih dari satu - Anda mungkin mendapatkan konsekuensi yang tidak diinginkan.
trevorgrayson
20
string.substring (string.indexOf ('-') +1)
trevorgrayson
indexOf tidak ada di IE8 dan di bawah, meskipun polyfill ada.
Erik Honn
3

Anda dapat melakukannya dengan built-in RegExp (pattern [, flags)) Notasi Pabrik di js seperti ini:

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

dalam fungsi kode exec di atas akan mengembalikan array dengan dua elemen (["-20202", "20202"]) satu dengan tanda hubung (-20202) dan satu tanpa tanda hubung (20202), Anda harus memilih elemen kedua (indeks 1)

Ekrami
sumber
2
myString.split('-').splice(1).join('-')
kcsoft
sumber
Bisa juga:myString.split('-').splice(-1).join('-')
Arkadiusz Wieczorek
0

Gunakan ekspresi reguler dari formulir: \ w- \ d + di mana a \ w mewakili kata dan \ d mewakili angka. Mereka tidak akan bekerja di luar kotak, jadi main-main. Coba ini .

secara langsung
sumber