Comment saisir une sous-chaîne avant un caractère spécifié jQuery ou JavaScript

238

J'essaie d'extraire tout avant la virgule ",". Comment faire cela en JavaScript ou jQuery? J'ai essayé ça et je n'ai pas travaillé ..

1345 albany street, Bellevue WA 42344

Je veux juste récupérer l'adresse.

var streetaddress= substr(addy, 0, index(addy, '.')); 
Anjana Sharma
la source
29
addy.split(',', 1)[0]
antak

Réponses:

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

Bien que ce ne soit pas le meilleur endroit pour des informations définitives sur ce que fait chaque méthode (le réseau de développeurs mozilla est meilleur pour cela) w3schools.com est bon pour vous initier à la syntaxe.


la source
22
Cela ne fonctionnera pas si la chaîne recherchée ne contient pas d'instance du caractère de recherche. Il renverra une chaîne vide.
David G
1
substrn'est pas recommandé; devrait utiliser à la substringplace developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Ben Creasy
153
var streetaddress = addy.split(',')[0];
user3336882
la source
10
balançoires et ronds-points - il crée inutilement un tableau, mais fonctionne au moins si le caractère d'arrêt n'est pas dans la chaîne
Alnitak
2
Pour une comparaison des performances, voir: jsperf.com/street-array-vs-substr
Goodbye StackExchange
2
lien de commentaire précédent est mort: /
elki42
29

essaye ça:

streetaddress.substring(0, streetaddress.indexOf(','));
Mikey G
la source
1
Pourquoi pas d'amour pour ma réponse? Si cette réponse est correcte stackoverflow.com/questions/3745515/… ma réponse est aussi précise que la réponse acceptée et fonctionne pour les indices de départ autres que 0.
Mikey G
8
Comme l'a souligné David G ci-dessus, peut-être parce que cela ne fonctionne pas s'il n'y a pas de virgule. L'OP peut impliquer que la chaîne aurait toujours une virgule, mais dans de nombreux cas, le délimiteur n'est pas garanti. Voir jsfiddle.net/13pkp1xn
Bumptious Q Bangwhistle
22
//split string into an array and grab the first item

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

De plus, je recommanderais de nommer vos variables avec camel-case (streetAddress) pour une meilleure lisibilité.

Miles Florence
la source
C'est mieux que la méthode utilisant indexof, dans le scénario où il n'y a pas de virgule
eyal_katz
2
Vous pouvez enregistrer une division de traitement et d'un arrêt au premier « » trouvé en utilisant ce @antak affiché comme commentaire dans stackoverflow.com/a/22386366/601386 : addy.split(',', 1)[0]. Voir developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .
grippe
En utilisant la déconstruction de tableau, vous pouvez faire: const [streetAddress,] = addy.split(','); Cela est utile dans les cas où vous voulez plus d'une valeur, comme: let [callerIdName, callerId] = callerIdString.split('<'); (le format original callerIdString est MCMULLIN, PARKER <+ 1XXXXXXXXXX>)
parker_codes
1
Cette réponse n'est-elle pas exactement la même que celle publiée le 30 octobre 2015?
kojow7
15

Si vous l'aimez court, utilisez simplement un RegExp :

var streetAddress = /[^,]*/.exec(addy)[0];
grippe
la source
4
+1, je pense que c'est une méthode raisonnable, mais j'ai pris un indice de cela et je suis allé avecaddy.split(',', 1)[0]
antak
3
Cette méthode est très agréable par exemple si vous voulez diviser sur un espace blanc: / [^ \ s] * /. Exec (...)
NuSkooler
12

presque la même chose que la réponse de David G mais sans la fonction anonyme, si vous n'avez pas envie d'en inclure une.

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

dans ce cas, nous utilisons le fait que le deuxième argument de substrest une longueur, et que nous savons que notre sous-chaîne commence à 0.

la première réponse n'est pas une solution générique en raison du comportement indésirable si la chaîne ne contient pas le caractère que vous recherchez.

si vous voulez un comportement correct dans un cas générique, utilisez cette méthode ou la méthode de David G, pas la première réponse

Les méthodes regex et split fonctionneront également, mais peuvent être un peu plus lentes / excessives pour ce problème spécifique.

ma
la source
6
var streetaddress = addy.substr(0, addy.indexOf('.')); 

(Vous devriez lire un tutoriel javascript , en particulier la partie sur les fonctions String )

Mira Weller
la source
4

Si vous souhaitez renvoyer la chaîne d'origine intacte si elle ne contient pas le caractère de recherche, vous pouvez utiliser une fonction anonyme (une fermeture):

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

Cela peut être rendu plus générique:

var streetaddress=(function(s,c){var i=s.indexOf(c);
   return i==-1 ? s : s.substr(0,i);})(addy,',');
David G
la source
4
var newString = string.substr(0,string.indexOf(','));
Gaurav
la source
2

Vous pouvez utiliser l'expression régulière car cela vous donnera la chaîne si elle correspond aux exigences. Le code serait quelque chose comme:

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.

Donc, pour décomposer le code. [1-9][0-9]*signifie essentiellement que le premier nombre ne peut pas être un zéro et doit être un nombre entre 1-9et que le nombre suivant peut être n'importe quel nombre 0-9et peut apparaître zéro ou plusieurs fois, car parfois le nombre n'est qu'un chiffre, puis il correspond à un espace. [a-zA-Z]correspond essentiellement à toutes les lettres majuscules en minuscules et doit se produire une ou plusieurs fois et cela se répète.

Ramen_Lover912
la source
0

Vous pouvez utiliser Azle pour obtenir des sous-chaînes avant :

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

az.get_everything_before(str, 'place')

Résultat : voici comment nous allons au

après

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

az.get_everything_after(str, 'go')

Résultat : à l'endroit!

et entre :

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

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

Résultat : on va au

Cybernétique
la source