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, '.')); 
Anjana Sharma
sumber
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.

di mana
sumber
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
153
var streetaddress = addy.split(',')[0];
pengguna3336882
sumber
10
ayunan dan bundaran - tidak perlu membuat array, tetapi setidaknya berfungsi jika karakter berhenti tidak ada dalam string
Alnitak
2
Untuk perbandingan kinerja, lihat: jsperf.com/street-array-vs-substr
Goodbye StackExchange
2
tautan komentar sebelumnya sudah mati: /
elki42
29

coba ini:

streetaddress.substring(0, streetaddress.indexOf(','));
Mikey G
sumber
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.

Miles Florence
sumber
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];
flu
sumber
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.

ma
sumber
6
var streetaddress = addy.substr(0, addy.indexOf('.')); 

(Anda harus membaca tutorial javascript , khususnya bagian tentang fungsi String )

Mira Weller
sumber
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,',');
David G
sumber
4
var newString = string.substr(0,string.indexOf(','));
Gaurav
sumber
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.

Ramen_Lover912
sumber
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

Berhubung dgn sibernetika
sumber