Jak pobierać podciąg przed określonym znakiem jQuery lub JavaScript


238

Próbuję wyodrębnić wszystko przed przecinkiem „,”. Jak to zrobić w JavaScript lub jQuery? Próbowałem tego i nie działa ..

1345 albany street, Bellevue WA 42344

Chcę tylko złapać adres.

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

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

Odpowiedzi:


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

Chociaż nie jest to najlepsze miejsce do uzyskania ostatecznych informacji o tym, co robi każda metoda ( lepiej jest w tym przypadku sieć deweloperów Mozilli ), w3schools.com jest dobre do wprowadzenia cię w składnię.


22
To nie zadziała, jeśli wyszukiwany ciąg nie zawiera instancji wyszukiwanego znaku. Zwróci pusty ciąg.
David G,

1
substrnie jest zalecane; należy substringzamiast tego użyć developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Ben Creasy


29

Spróbuj tego:

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

1
Dlaczego nie ma miłości do mojej odpowiedzi? Jeśli ta odpowiedź jest poprawna stackoverflow.com/questions/3745515/…, moja odpowiedź jest równie dokładna jak zaakceptowana odpowiedź i działa dla wskaźników początkowych innych niż 0.
Mikey G

8
Jak zauważył David G powyżej, być może dlatego, że nie działa, jeśli nie ma przecinka. OP mógł sugerować, że ciąg zawsze będzie miał przecinek, ale w wielu przypadkach ogranicznik nie jest gwarantowany. Zobacz jsfiddle.net/13pkp1xn
Bumptious Q Bangwhistle

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

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

Polecam też nazwać zmienne wielkimi literami (streetAddress) dla lepszej czytelności.


Jest to lepsze niż metoda wykorzystująca indexof w scenariuszu, w którym nie ma znaku przecinka
eyal_katz

2
Można zaoszczędzić trochę przetwarzania i zatrzymać podział na pierwszym „” znaleźć za pomocą co @antak pisał jako komentarz w stackoverflow.com/a/22386366/601386 : addy.split(',', 1)[0]. Zobacz developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .
grypa

Korzystając z dekonstrukcji tablic, możesz: const [streetAddress,] = addy.split(','); Jest to pomocne w przypadkach, gdy potrzebujesz więcej niż jednej wartości, takich jak: let [callerIdName, callerId] = callerIdString.split('<'); (oryginalny format callerIdString to MCMULLIN, PARKER <+ 1XXXXXXXXXX>)
parker_codes

1
Czy ta odpowiedź nie jest dokładnie taka sama jak odpowiedź opublikowana 30 października 2015 r.?
kojow7

15

Jeśli podoba Ci się to krótko, po prostu użyj RegExp :

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

4
+1, myślę, że jest to rozsądna metoda, ale wziąłem podpowiedź i poszedłem zaddy.split(',', 1)[0]
antak

3
Ta metoda jest bardzo przydatna na przykład, jeśli chcesz podzielić białe
znaki

12

prawie taka sama jak odpowiedź Davida G., ale bez anonimowej funkcji, jeśli nie masz ochoty na nią.

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

w tym przypadku wykorzystujemy fakt, że drugim argumentem substrjest długość i wiemy, że nasz podłańcuch zaczyna się od 0.

najwyższa odpowiedź nie jest ogólnym rozwiązaniem ze względu na niepożądane zachowanie, jeśli ciąg nie zawiera poszukiwanego znaku.

jeśli chcesz poprawnego zachowania w ogólnym przypadku, użyj tej metody lub metody Davida G, a nie najwyższej odpowiedzi

Metody regex i split również będą działać, ale mogą być nieco wolniejsze / przesadzone w przypadku tego konkretnego problemu.




4

Jeśli chcesz zwrócić oryginalny ciąg nietknięty, jeśli nie zawiera on znaku wyszukiwania, możesz użyć funkcji anonimowej (zamknięcie):

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

Można to uczynić bardziej ogólnym:

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


2

Możesz użyć wyrażenia regularnego, ponieważ da ci to ciąg znaków, jeśli będzie zgodny z wymaganiami. Kod mógłby wyglądać następująco:

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.

Więc rozbić kod. [1-9][0-9]*w zasadzie oznacza, że ​​pierwsza liczba nie może być zerem i musi być liczbą pomiędzy, 1-9a kolejna liczba może być dowolną liczbą od 0-9i może występować zero lub więcej razy, ponieważ czasami liczba jest tylko jedną cyfrą, a następnie pasuje do spacji. [a-zA-Z]w zasadzie dopasowuje wszystkie duże litery do małych liter i musi wystąpić jeden lub więcej razy, i to się powtarza.


0

Możesz użyć Azle, aby uzyskać podciągi przed :

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

az.get_everything_before(str, 'place')

Wynik : w ten sposób przechodzimy do

po

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

az.get_everything_after(str, 'go')

Wynik : do miejsca!

i pomiędzy :

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

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

Wynik : idziemy do

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.