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, '.')); 
Anjana Sharma
quelle
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.

whereesrhys
quelle
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
152
var streetaddress = addy.split(',')[0];
user3336882
quelle
10
Schaukeln und Kreisverkehre - es erstellt unnötigerweise ein Array, funktioniert aber zumindest, wenn das Stoppzeichen nicht in der Zeichenfolge enthalten ist
Alnitak
2
Zum Leistungsvergleich siehe: jsperf.com/street-array-vs-substr
Goodbye StackExchange
2
vorheriger Kommentar Link ist tot: /
elki42
29

Versuche dies:

streetaddress.substring(0, streetaddress.indexOf(','));
Mikey G.
quelle
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.

Miles Florence
quelle
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];
Grippe
quelle
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.

ma
quelle
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,',');
David G.
quelle
4
var newString = string.substr(0,string.indexOf(','));
Gaurav
quelle
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.

Ramen_Lover912
quelle
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

Kybernetisch
quelle