So greifen Sie auf Teilzeichenfolgen vor einem bestimmten Zeichen jQuery oder JavaScript zu


237

Ich versuche alles vor dem Komma ',' zu extrahieren. Wie mache ich das in JavaScript oder jQuery? Ich habe es versucht und nicht funktioniert ..

1345 albany street, Bellevue WA 42344

Ich möchte nur die Adresse abrufen.

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

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

Antworten:


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

Während es nicht der beste Ort ist, um endgültige Informationen darüber zu erhalten, was jede Methode tut ( Mozilla Developer Network ist dafür besser geeignet ), ist w3schools.com gut geeignet, um Ihnen die Syntax vorzustellen.


22
Dies funktioniert nicht, wenn die gesuchte Zeichenfolge keine Instanz des Suchzeichens enthält. Es wird eine leere Zeichenfolge zurückgegeben.
David G

1
substrwird nicht empfohlen; sollte substringstattdessen developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… verwenden
Ben Creasy


29

Versuche dies:

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

1
Warum keine Liebe für meine Antwort? Wenn diese Antwort korrekt ist stackoverflow.com/questions/3745515/… meine Antwort ist so genau wie die akzeptierte Antwort und funktioniert für andere
Mikey G

8
Wie von David G oben ausgeführt, möglicherweise, weil es nicht funktioniert, wenn kein Komma vorhanden ist. Das OP hat möglicherweise impliziert, dass die Zeichenfolge immer ein Komma haben würde, aber in vielen Fällen ist das Trennzeichen nicht garantiert. Siehe jsfiddle.net/13pkp1xn
Bumptious Q Bangwhistle

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

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

Außerdem würde ich empfehlen, Ihre Variablen zur besseren Lesbarkeit mit camel-case (streetAddress) zu benennen.


Dies ist besser als die Methode mit indexof, in dem Szenario, in dem es kein Komma gibt
eyal_katz

2
Sie können die Verarbeitung speichern und die Aufteilung beim ersten "" beenden, indem Sie das verwenden, was @antak als Kommentar in stackoverflow.com/a/22386366/601386 : gepostet hat : addy.split(',', 1)[0]. Siehe developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .
Grippe

Mit Array Dekonstruktion, könnten Sie tun: const [streetAddress,] = addy.split(','); Dies ist für Fälle nützlich ist , wenn Sie mehr als einen Wert wollen, wie zum Beispiel: let [callerIdName, callerId] = callerIdString.split('<'); (original callerIdString Format ist McMullin, PARKER <+ 1XXXXXXXXXX>)
parker_codes

Ist diese Antwort nicht genau die gleiche wie die Antwort vom 30. Oktober 2015?
kojow7

15

Wenn Sie es kurz mögen, verwenden Sie einfach ein RegExp :

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

4
+1, ich denke, das ist eine vernünftige Methode, aber ich nahm einen Hinweis davon und ging mitaddy.split(',', 1)[0]
Antak

3
Diese Methode ist zum Beispiel sehr schön, wenn Sie auf Leerzeichen aufteilen möchten: / [^ \ s] * /. Exec (...)
NuSkooler

12

Fast das Gleiche wie die Antwort von David G, jedoch ohne die anonyme Funktion, wenn Sie keine Lust haben, eine einzuschließen.

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

In diesem Fall nutzen wir die Tatsache, dass das zweite Argument von substreine Länge ist und wir wissen, dass unser Teilstring bei 0 beginnt.

Die Top-Antwort ist aufgrund des unerwünschten Verhaltens keine generische Lösung, wenn die Zeichenfolge nicht das gesuchte Zeichen enthält.

Wenn Sie in einem generischen Fall ein korrektes Verhalten wünschen, verwenden Sie diese Methode oder die Methode von David G, nicht die beste Antwort

Regex- und Split-Methoden funktionieren ebenfalls, können jedoch für dieses spezielle Problem etwas langsamer / übertrieben sein.




4

Wenn Sie die ursprüngliche Zeichenfolge unberührt zurückgeben möchten, wenn sie das Suchzeichen nicht enthält, können Sie eine anonyme Funktion (einen Abschluss) verwenden:

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

Dies kann allgemeiner gestaltet werden:

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

Sie können Regex verwenden, da dies Ihnen die Zeichenfolge gibt, wenn sie den Anforderungen entspricht. Der Code wäre ungefähr so:

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.

Also, um den Code aufzuschlüsseln. [1-9][0-9]*bedeutet im Grunde, dass die erste Zahl keine Null sein kann und eine Zahl zwischen sein muss 1-9und die nächste Zahl eine beliebige Zahl sein 0-9kann und null oder mehrmals vorkommen kann, da die Zahl manchmal nur eine Ziffer ist und dann mit einem Leerzeichen übereinstimmt. [a-zA-Z]Grundsätzlich werden alle Großbuchstaben mit Kleinbuchstaben abgeglichen und müssen ein- oder mehrmals vorkommen. Dies wird wiederholt.


0

Sie können mit Azle Strings bekommen vor :

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

az.get_everything_before(str, 'place')

Ergebnis : So gehen wir zum

nach dem

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

az.get_everything_after(str, 'go')

Ergebnis : zum Ort!

und dazwischen :

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

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

Ergebnis : Wir gehen zum

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.