Come afferrare la sottostringa prima di un carattere specificato jQuery o JavaScript


238

Sto cercando di estrarre tutto prima della virgola ','. Come posso farlo in JavaScript o jQuery? Ho provato questo e non funziona ..

1345 albany street, Bellevue WA 42344

Voglio solo prendere l'indirizzo.

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

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

Risposte:


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

Anche se non è il posto migliore per informazioni definitive su ciò che ogni metodo fa (la rete di sviluppatori mozilla è migliore per questo) w3schools.com è buono per introdurti alla sintassi.


22
Ciò non funzionerà se la stringa cercata non contiene un'istanza del carattere di ricerca. Restituirà una stringa vuota.
David G,

1
substrnon è raccomandato; dovrebbe substringinvece utilizzare developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Ben Creasy,


29

prova questo:

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

1
Perché nessun amore per la mia risposta? Se questa risposta è corretta stackoverflow.com/questions/3745515/… la mia risposta è accurata come la risposta accettata e funziona con indici di partenza diversi da 0.
Mikey G

8
Come sottolineato da David G sopra, forse perché non funziona se non c'è una virgola. L'OP potrebbe aver implicato che la stringa avrebbe sempre una virgola, ma in molti casi il delimitatore non è garantito. Vedi jsfiddle.net/13pkp1xn
Bumptious Q Bangwhistle

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

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

Inoltre, consiglierei di assegnare un nome alle variabili con camel-case (streetAddress) per una migliore leggibilità.


È meglio del metodo che utilizza indexof, nello scenario in cui non è presente il carattere virgola
eyal_katz

2
Si può risparmiare un po 'di elaborazione e la fermata divisione al primo "" trovato utilizzando ciò che @antak pubblicato come commento in stackoverflow.com/a/22386366/601386 : addy.split(',', 1)[0]. Vedi developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .
influenza

Utilizzando la decostruzione dell'array, è possibile: const [streetAddress,] = addy.split(','); Ciò è utile nei casi in cui si desidera più di un valore, ad esempio: let [callerIdName, callerId] = callerIdString.split('<'); (il formato callerIdString originale è MCMULLIN, PARKER <+ 1XXXXXXXXXX>)
parker_codes

1
Questa risposta non è esattamente la stessa della risposta pubblicata il 30 ottobre 2015?
kojow7,

15

Se ti piace in breve, usa semplicemente un RegExp :

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

4
+1, penso che questo sia un metodo ragionevole, ma ho preso un suggerimento da questo e ci sono andatoaddy.split(',', 1)[0]
antak

3
Questo metodo è molto utile, ad esempio, se vuoi dividere su uno spazio bianco: / [^ \ s] * /. Exec (...)
NuSkooler

12

quasi la stessa cosa della risposta di David G ma senza la funzione anonima, se non hai voglia di includerne una.

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

in questo caso ci avvaliamo del fatto che il secondo argomento di substrè una lunghezza e che sappiamo che la nostra sottostringa sta iniziando da 0.

la risposta migliore non è una soluzione generica a causa del comportamento indesiderato se la stringa non contiene il carattere che stai cercando.

se si desidera un comportamento corretto in un caso generico, utilizzare questo metodo o il metodo David G, non la risposta migliore

Anche i metodi regex e split funzioneranno, ma potrebbero essere un po 'più lenti / eccessivi per questo problema specifico.




4

Se si desidera restituire la stringa originale non trattata se non contiene il carattere di ricerca, è possibile utilizzare una funzione anonima (una chiusura):

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

Questo può essere reso più generico:

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

Puoi usare regex in quanto ti darà la stringa se soddisfa i requisiti. Il codice sarebbe simile a:

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.

Quindi per scomporre il codice. [1-9][0-9]*fondamentalmente significa che il primo numero non può essere uno zero e deve essere un numero compreso tra 1-9e il numero successivo può essere qualsiasi numero da 0-9e può verificarsi zero o più volte poiché a volte il numero è solo una cifra e quindi corrisponde a uno spazio. [a-zA-Z]fondamentalmente abbina tutte le lettere maiuscole alle lettere minuscole e deve ricorrere una o più volte e questo si ripete.


0

Puoi usare Azle per ottenere sottostringhe prima di :

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

az.get_everything_before(str, 'place')

Risultato : ecco come andiamo al

dopo

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

az.get_everything_after(str, 'go')

Risultato : al posto!

e tra :

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

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

Risultato : andiamo al

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.