Como capturar substring antes de um caractere especificado jQuery ou JavaScript

237

Estou tentando extrair tudo antes da vírgula ','. Como faço isso em JavaScript ou jQuery? Eu tentei isso e não está funcionando ..

1345 albany street, Bellevue WA 42344

Eu só quero pegar o endereço.

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

Respostas:

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

Embora não seja o melhor lugar para obter informações definitivas sobre o que cada método faz (a rede de desenvolvedores do mozilla é melhor para isso), o w3schools.com é bom para apresentar a sintaxe.

wheresrhys
fonte
22
Isso não funcionará se a cadeia de caracteres pesquisada não contiver uma instância do caractere de pesquisa. Retornará uma string vazia.
David G
1
substrnão é recomendado; em substringvez disso, use developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/…
Ben Creasy
152
var streetaddress = addy.split(',')[0];
user3336882
fonte
10
balanços e rotundas - é desnecessariamente cria uma matriz, mas faz pelo menos trabalho se o personagem parada não é na cadeia
Alnitak
2
Para comparação de desempenho, consulte: jsperf.com/street-array-vs-substr
Goodbye StackExchange
2
link do comentário anterior está morto: /
elki42 27/06/19
29

tente isto:

streetaddress.substring(0, streetaddress.indexOf(','));
Mikey G
fonte
1
Por que não há amor pela minha resposta? Se esta resposta estiver correta, stackoverflow.com/questions/3745515/… minha resposta é tão precisa quanto a resposta aceita e funciona para iniciar índices diferentes de 0. #
Mikey G
8
Como apontado por David G acima, possivelmente porque não funciona se não houver vírgula. O OP pode ter implícito que a string sempre teria uma vírgula, mas em muitos casos o delimitador não é garantido. Veja jsfiddle.net/13pkp1xn
Bumptious Q Bangwhistle
22
//split string into an array and grab the first item

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

Além disso, eu recomendo nomear suas variáveis ​​com camel-case (streetAddress) para melhor legibilidade.

Miles Florence
fonte
Isto é melhor do que o método usando IndexOf, no cenário em que não existe um caracter vírgula
eyal_katz
2
Você pode poupar algum splitting processamento e parar na primeira "" encontrado usando o que @antak postado como um comentário no stackoverflow.com/a/22386366/601386 : addy.split(',', 1)[0]. Veja developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .
gripe
Usando variedade desconstrução, você poderia fazer: const [streetAddress,] = addy.split(','); Isto é útil para casos em que você quer mais do que um valor, tais como: let [callerIdName, callerId] = callerIdString.split('<'); (formato callerIdString original está McMullin, PARKER <+ 1XXXXXXXXXX>)
parker_codes
Esta resposta não é exatamente a mesma que foi postada em 30 de outubro de 2015?
kojow7 7/01
15

Se você gostou, basta usar um RegExp :

var streetAddress = /[^,]*/.exec(addy)[0];
gripe
fonte
4
+1, eu acho que esse é um método razoável, mas peguei uma dica e segui comaddy.split(',', 1)[0]
#
3
Este método é muito bom, por exemplo, se você quiser dividir espaço em branco: / [^ \ s] * / exec (...).
NuSkooler
12

quase a mesma coisa que a resposta de David G, mas sem a função anônima, se você não quiser incluir uma.

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

neste caso, usamos o fato de que o segundo argumento de substré um comprimento e que sabemos que nossa substring está começando em 0.

a resposta principal não é uma solução genérica devido ao comportamento indesejável se a sequência não contiver o caractere que você está procurando.

se você deseja um comportamento correto em um caso genérico, use esse método ou o método de David G, não a resposta principal

Os métodos regex e split também funcionarão, mas podem ser um pouco mais lentos / exagerados para esse problema específico.

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

(Você deve ler um tutorial em javascript , especialmente a parte sobre funções String )

Mira Weller
fonte
4

Se você quiser retornar a sequência original intacta, se ela não contiver o caractere de pesquisa, poderá usar uma função anônima (um fechamento):

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

Isso pode ser mais genérico:

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

Você pode usar regex, pois isso fornecerá a string se ela corresponder aos requisitos. O código seria algo como:

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.

Então, para quebrar o código. [1-9][0-9]*basicamente significa que o primeiro número não pode ser um zero e deve ser um número entre 1-9e o próximo número pode ser qualquer número 0-9e pode ocorrer zero ou mais vezes, pois às vezes o número é apenas um dígito e corresponde a um espaço. [a-zA-Z]corresponde basicamente a todas as letras maiúsculas e minúsculas e deve ocorrer uma ou mais vezes e isso é repetido.

Ramen_Lover912
fonte
0

Você pode usar o Azle para obter substrings antes :

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

az.get_everything_before(str, 'place')

Resultado : é assim que vamos ao

depois de

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

az.get_everything_after(str, 'go')

Resultado : para o local!

e entre :

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

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

Resultado : vamos ao

Cibernético
fonte