Cara mengambil substring sebelum karakter tertentu jQuery atau JavaScript


238

Saya mencoba untuk mengekstrak semua sebelum koma ','. Bagaimana saya melakukan ini dalam JavaScript atau jQuery? Saya mencoba ini dan tidak berhasil ..

1345 albany street, Bellevue WA 42344

Saya hanya ingin mengambil alamat jalan.

var streetaddress= substr(addy, 0, index(addy, '.')); 

29
addy.split(',', 1)[0]
antak

Jawaban:


404
var streetaddress= addy.substr(0, addy.indexOf(',')); 

Meskipun ini bukan tempat terbaik untuk informasi definitif tentang apa yang dilakukan masing-masing metode ( jaringan pengembang mozilla lebih baik untuk itu) w3schools.com bagus untuk memperkenalkan Anda pada sintaksis.


22
Ini tidak akan berfungsi jika string yang dicari tidak mengandung turunan dari karakter pencarian. Ini akan mengembalikan string kosong.
David G

1
substrtidak direkomendasikan; harus menggunakan substringbukannya developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
Ben Creasy


29

coba ini:

streetaddress.substring(0, streetaddress.indexOf(','));

1
Kenapa tidak ada cinta untuk jawabanku? Jika jawaban ini benar stackoverflow.com/questions/3745515/ ... jawaban saya seakurat jawaban yang diterima, dan berfungsi untuk memulai indeks selain 0.
Mikey G

8
Seperti yang ditunjukkan oleh David G di atas, mungkin karena itu tidak berfungsi jika tidak ada koma. OP mungkin menyiratkan bahwa string akan selalu memiliki koma, tetapi dalam banyak kasus pembatas tidak dijamin. Lihat jsfiddle.net/13pkp1xn
Q Bangwhistle

22
//split string into an array and grab the first item

var streetaddress = addy.split(',')[0];

Juga, saya akan merekomendasikan memberi nama variabel Anda dengan case unta (streetAddress) untuk keterbacaan yang lebih baik.


Ini lebih baik daripada metode yang menggunakan indexof, dalam skenario di mana tidak ada karakter koma
eyal_katz

2
Anda dapat menyimpan beberapa pengolahan dan berhenti membelah pada pertama "" ditemukan dengan menggunakan apa yang @antak diposting sebagai komentar di stackoverflow.com/a/22386366/601386 : addy.split(',', 1)[0]. Lihat developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .
Flu

Menggunakan dekonstruksi array, Anda dapat melakukan: const [streetAddress,] = addy.split(','); Ini bermanfaat untuk kasus-kasus ketika Anda menginginkan lebih dari satu nilai, seperti: let [callerIdName, callerId] = callerIdString.split('<'); (format asli pemanggilIdString adalah MCMULLIN, PARKER <+ 1XXXXXXXXXX>)
parker_codes

1
Bukankah jawaban ini persis sama dengan jawaban yang diposting pada 30 Oktober 2015?
kojow7

15

Jika Anda suka, cukup gunakan RegExp :

var streetAddress = /[^,]*/.exec(addy)[0];

4
+1, saya pikir ini adalah metode yang masuk akal, tapi saya mengambil petunjuk dari ini dan pergi denganaddy.split(',', 1)[0]
antak

3
Metode ini sangat bagus misalnya jika Anda ingin membagi pada ruang putih: / [^ \ s] * /.
Exec

12

hampir sama dengan jawaban David G tetapi tanpa fungsi anonim, jika Anda tidak ingin memasukkannya.

s = s.substr(0, s.indexOf(',') === -1 ? s.length : s.indexOf(','));

dalam hal ini kita menggunakan fakta bahwa argumen kedua substradalah panjang, dan bahwa kita tahu substring kita mulai dari 0.

jawaban teratas bukan solusi umum karena perilaku yang tidak diinginkan jika string tidak mengandung karakter yang Anda cari.

jika Anda ingin perilaku yang benar dalam kasus umum, gunakan metode ini atau metode David G, bukan jawaban teratas

metode regex dan split juga akan berfungsi, tetapi mungkin agak lambat / berlebihan untuk masalah khusus ini.




4

Jika Anda ingin mengembalikan string asli yang tidak tersentuh jika tidak mengandung karakter pencarian maka Anda dapat menggunakan fungsi anonim (penutup):

var streetaddress=(function(s){var i=s.indexOf(',');
   return i==-1 ? s : s.substr(0,i);})(addy);

Ini dapat dibuat lebih umum:

var streetaddress=(function(s,c){var i=s.indexOf(c);
   return i==-1 ? s : s.substr(0,i);})(addy,',');

4
var newString = string.substr(0,string.indexOf(','));

2

Anda bisa menggunakan regex karena ini akan memberi Anda string jika cocok dengan persyaratan. Kode tersebut akan menjadi seperti:

const address = "1345 albany street, Bellevue WA 42344";
const regex = /[1-9][0-9]* [a-zA-Z]+ [a-zA-Z]+/;
const matchedResult = address.match(regex);

console.log(matchedResult[0]); // This will give you 1345 albany street.

Jadi untuk memecah kode. [1-9][0-9]*pada dasarnya berarti angka pertama tidak boleh nol dan harus menjadi angka antara 1-9dan angka berikutnya dapat berupa angka apa pun dari 0-9dan dapat muncul nol atau lebih banyak kali karena kadang-kadang angka hanya satu digit dan kemudian cocok dengan spasi. [a-zA-Z]pada dasarnya mencocokkan semua huruf besar dengan huruf kecil dan harus muncul satu kali atau lebih dan ini diulang.


0

Anda dapat menggunakan Azle untuk mendapatkan substring sebelum :

str = 'This is how we go to the place!'

az.get_everything_before(str, 'place')

Hasil : Beginilah cara kami menuju

setelah

str = 'This is how we go to the place!'

az.get_everything_after(str, 'go')

Hasil : ke tempat!

dan di antara :

str = 'This is how we go to the place!'

az.get_everything_between(str, 'how', 'place')

Hasil : kita pergi ke

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.