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, '.')); 
Anjana Sharma
źródło
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ę.

wheresrhys
źródło
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
152
var streetaddress = addy.split(',')[0];
użytkownik3336882
źródło
10
huśtawki i ronda - niepotrzebnie tworzy tablicę, ale działa przynajmniej, jeśli znak stopu nie znajduje się w ciągu
Alnitak
2
Dla porównania wydajności, patrz: jsperf.com/street-array-vs-substr
Goodbye StackExchange
2
poprzedni komentarz link nie działa: /
elki42
29

Spróbuj tego:

streetaddress.substring(0, streetaddress.indexOf(','));
Mikey G.
źródło
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.

Miles Florence
źródło
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];
grypa
źródło
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.

mama
źródło
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,',');
David G.
źródło
4
var newString = string.substr(0,string.indexOf(','));
Gauraw
źródło
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.

Ramen_Lover912
źródło
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

Cybernetyczny
źródło