Belirtilen bir karakterden önce alt dize nasıl alınır jQuery veya JavaScript


238

',' Virgülünden önce her şeyi çıkarmaya çalışıyorum. Bunu JavaScript veya jQuery'de nasıl yapabilirim? Bunu denedim ve çalışmıyor ...

1345 albany street, Bellevue WA 42344

Sadece sokak adresini almak istiyorum.

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

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

Yanıtlar:


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

Her yöntemin ne yaptığına dair kesin bilgi için en iyi yer olmasa da ( mozilla geliştirici ağı bunun için daha iyidir) w3schools.com , sözdizimini tanıtmak için iyidir.


22
Aranan dize, arama karakterinin bir örneğini içermiyorsa bu çalışmaz. Boş bir dize döndürür.
David G

1
subströnerilmez; kullanmalıdır substringyerine developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
Ben Creasy


29

bunu dene:

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

1
Cevabım için neden aşk yok? Bu cevap doğruysa stackoverflow.com/questions/3745515/… Cevabım kabul edilen cevap kadar doğrudur ve 0 dışındaki endeksleri başlatmak için çalışır.
Mikey G

8
Yukarıda David G tarafından işaret edildiği gibi, muhtemelen virgül yoksa işe yaramaz. OP, dizenin her zaman virgül olacağını ima etmiş olabilir, ancak çoğu durumda sınırlayıcı garanti edilmez. Bkz. Jsfiddle.net/13pkp1xn
Bumptious Q Bangwhistle

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

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

Ayrıca, daha iyi okunabilirlik için değişkenlerinizi deve-case (streetAddress) ile adlandırmanızı tavsiye ederim.


Virgül karakteri olmayan senaryoda, indexof kullanan yöntemden daha iyidir
eyal_katz

2
Başta bazı işlenmesi ve durdurma bölme kurtarabilir "" bir açıklama olarak yayınlanmıştır @antak neyi kullanarak bulundu stackoverflow.com/a/22386366/601386 : addy.split(',', 1)[0]. Developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/… adresine bakın .
grip

Dizi yapısökme kullanarak şunları yapabilirsiniz: const [streetAddress,] = addy.split(','); Bu, birden fazla değer istediğiniz durumlar için yararlıdır, örneğin: let [callerIdName, callerId] = callerIdString.split('<'); (orijinal callerIdString biçimi MCMULLIN, PARKER <+ 1XXXXbalaj>)
parker_codes 31:18

1
Bu yanıt 30 Ekim 2015'te verilen yanıtla tam olarak aynı değil mi?
kojow7

15

Kısa beğenirseniz, bir RegExp kullanın :

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

4
+1, bunun makul bir yöntem olduğunu düşünüyorum, ama bundan bir ipucu aldım ve gittimaddy.split(',', 1)[0]
antak

3
Bu yöntem, örneğin beyaz boşluğa bölmek istiyorsanız çok
hoştur

12

David G'nin cevabı ile hemen hemen aynı şey ama anonim bir işlev olmadan, bir tane dahil etmek istemiyorsanız.

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

bu durumda ikinci argümanının substrbir uzunluk olduğu ve alt dizimizin 0'dan başladığını bildiğimizden yararlanıyoruz.

dize, aradığınız karakteri içermiyorsa, en üst yanıt genel bir çözüm değildir.

genel bir durumda doğru davranış istiyorsanız, en iyi yanıtı değil, bu yöntemi veya David G'nin yöntemini kullanın

regex ve split yöntemleri de işe yarayacaktır, ancak bu özel sorun için biraz daha yavaş / aşırı olabilir.




4

Arama karakterini içermiyorsa, orijinal dizgiye dokunulmadan geri dönmek isterseniz, anonim bir işlev (kapatma) kullanabilirsiniz:

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

Bu daha genel yapılabilir:

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

Eğer regex kullanabilirsiniz, çünkü bu şartlara uyuyorsa size dize verecektir. Kod şöyle bir şey olurdu:

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.

Yani kodu bozmak için. [1-9][0-9]*temel olarak, ilk sayı sıfır olamaz ve bir sayı olmak zorundadır ve bir 1-9sonraki sayı herhangi bir sayı 0-9olabilir ve bazen sayı sadece bir basamak olduğundan ve daha sonra bir boşlukla eşleştiğinden sıfır veya daha fazla kez oluşabilir. [a-zA-Z]temel olarak tüm büyük harfleri küçük harflerle eşleştirir ve bir veya daha fazla kez olması gerekir ve bu tekrarlanır.


0

Daha önce alt dizeleri almak için Azle'yi kullanabilirsiniz :

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

az.get_everything_before(str, 'place')

Sonuç : Bu şekilde

sonra

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

az.get_everything_after(str, 'go')

Sonuç : yere!

ve arasında :

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

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

Sonuç : Biz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.