2012-02-03 28 views

Odpowiedz

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

Chociaż nie jest najlepsza miejsce na ostateczne w formacja na temat tego, co robi każda metoda (mozilla developer network jest na to lepsza) w3schools.com jest dobra do wprowadzenia do składni.

+140

Nie musisz być protekcjonalny. – naomi

+16

Nie zadziała, jeśli wyszukiwany ciąg nie zawiera instancji znaku wyszukiwania. Zwróci pusty ciąg. –

+0

Per David G, zobacz https://jsfiddle.net/13pkp1xn/ –

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

spróbuj tego:

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

Dlaczego nie miłość do mojej odpowiedzi? Jeśli ta odpowiedź jest poprawna, http://stackoverflow.com/questions/3745515/what-is-the-difference-between-substr- i-substring moja odpowiedź jest tak dokładna, jak przyjęta odpowiedź, i działa dla początkowych indeksów innych niż 0 –

+3

Jak wskazał David G powyżej, prawdopodobnie dlatego, że nie działa, jeśli nie ma przecinka.OP mógł sugerować, że ciąg znaków zawsze zawiera przecinek, ale w wielu przypadkach ogranicznik nie jest gwarantowany. Zobacz https://jsfiddle.net/13pkp1xn/ –

12

Jeśli lubisz to krótko po prostu użyć RegExp:

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

Czy coś jest nie tak z to? – flu

+4

+1, myślę, że to rozsądna metoda, ale wziąłem z tego przykład i połączyłem się z 'addy.split (',', 1) [0]' – antak

+3

Ta metoda jest bardzo dobra na przykład, jeśli chcesz podzielić na białej spacji:/[^ \ s] * /. exec (...) – NuSkooler

3

Jeśli chcesz przywrócić oryginalny łańcuch nietknięty, jeśli nie zawierają znak wyszukiwarki można użyć anonimowego funkcji (zamknięcie):

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

ten może być bardziej ogólna:

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

huśtawki i ronda - niepotrzebnie tworzy tablicę, ale działa przynajmniej, jeśli znak stopu nie znajduje się w ciągu znaków – Alnitak

+1

Dla porównania wydajności, zobacz: https://jsperf.com/street-array-vs-substr – FrankerZ

6

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

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

w tym przypadku możemy skorzystać z faktu, że drugi argument substr jest długością, a wiemy, że nasz podciąg jest zaczynając od 0.

górna odpowiedź jest nie rodzajowe rozwiązanie ze względu na niepożądane zachowanie, jeśli ciąg znaków nie zawiera poszukiwanej postaci.

jeśli chcesz prawidłowego zachowania się w ogólnej sytuacji należy użyć tej metody lub metody David G, a nie górną odpowiedź

regex i dzielenia metody będą również pracować, ale może być nieco wolniejszy/overkill dla tego konkretnego problemu.

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

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

Również polecam nazywania zmiennych z wielbłądziej przypadku (StreetAddress) dla lepszej czytelności.

+0

To jest lepsze niż metoda używająca indexof, w scenariuszu, w którym nie ma znaku przecinka –

+0

Możesz zapisać trochę przetwarzania i przestać dzielić na początku ", "znalezione przy użyciu tego, co @antak zamieścił jako komentarz w https://stackoverflow.com/a/22386366/601386:' addy.split (',', 1) [0] '. Zobacz https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split. – flu