Cómo tomar una subcadena antes de un carácter específico jQuery o JavaScript


238

Estoy tratando de extraer todo antes de la coma ','. ¿Cómo hago esto en JavaScript o jQuery? Intenté esto y no funcionó ...

1345 albany street, Bellevue WA 42344

Solo quiero tomar la dirección de la calle.

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

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

Respuestas:


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

Si bien no es el mejor lugar para obtener información definitiva sobre lo que hace cada método (la red de desarrolladores de mozilla es mejor para eso) w3schools.com es bueno para presentarle la sintaxis.


22
Esto no funcionará si la cadena que se busca no contiene una instancia del carácter de búsqueda. Devolverá una cadena vacía.
David G

1
substrno es recomendable debería usar substringen su lugar developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Ben Creasy el


29

prueba esto:

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

1
¿Por qué no ama mi respuesta? Si esta respuesta es correcta stackoverflow.com/questions/3745515/… mi respuesta es tan precisa como la respuesta aceptada, y funciona para iniciar índices distintos de 0.
Mikey G

8
Como señaló David G arriba, posiblemente porque no funciona si no hay coma. El OP puede haber implicado que la cadena siempre tendría una coma, pero en muchos casos el delimitador no está garantizado. Ver jsfiddle.net/13pkp1xn
Bumptious Q Bangwhistle el

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

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

Además, recomendaría nombrar sus variables con camel-case (streetAddress) para una mejor legibilidad.


Esto es mejor que el método que usa indexof, en el escenario donde no hay caracteres de coma
eyal_katz

2
Usted puede ahorrar algo de procesamiento y la parada de la división en la primera "" que se encuentra mediante el uso de lo que @antak registró como un comentario en stackoverflow.com/a/22386366/601386 : addy.split(',', 1)[0]. Ver developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .
gripe

Usando la deconstrucción de matriz, podría hacer: const [streetAddress,] = addy.split(','); Esto es útil para casos en los que desea más de un valor, como: let [callerIdName, callerId] = callerIdString.split('<'); (el formato original callerIdString es MCMULLIN, PARKER <+ 1XXXXXXXXXX>)
parker_codes

1
¿No es esta respuesta exactamente igual a la respuesta publicada el 30 de octubre de 2015?
kojow7

15

Si te gusta, simplemente usa un RegExp :

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

44
+1, creo que este es un método razonable, pero tomé una pista de esto y addy.split(',', 1)[0]
seguí

3
Este método es muy bueno, por ejemplo, si desea dividir en espacios en blanco: / [^ \ s] * /. Exec (...)
NuSkooler

12

casi lo mismo que la respuesta de David G pero sin la función anónima, si no tiene ganas de incluir una.

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

en este caso, hacemos uso del hecho de que el segundo argumento de substres una longitud, y que sabemos que nuestra subcadena comienza en 0.

la respuesta principal no es una solución genérica debido al comportamiento indeseable si la cadena no contiene el carácter que está buscando.

si desea un comportamiento correcto en un caso genérico, use este método o el método de David G, no la respuesta principal

Los métodos regex y split también funcionarán, pero pueden ser algo más lentos / excesivos para este problema específico.




4

Si desea devolver la cadena original intacta si no contiene el carácter de búsqueda, puede usar una función anónima (un cierre):

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

Esto se puede hacer más genérico:

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

Puede usar expresiones regulares, ya que esto le dará la cadena si cumple con los requisitos. El código sería 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.

Entonces, para descifrar el código. [1-9][0-9]*básicamente significa que el primer número no puede ser un cero y debe ser un número intermedio 1-9y el siguiente número puede ser cualquier número 0-9y puede ocurrir cero o más veces ya que a veces el número es solo un dígito y luego coincide con un espacio. [a-zA-Z]básicamente hace coincidir todas las letras mayúsculas con minúsculas y tiene que aparecer una o más veces y esto se repite.


0

Puede usar Azle para obtener subcadenas antes :

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

az.get_everything_before(str, 'place')

Resultado : así es como vamos al

después

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

az.get_everything_after(str, 'go')

Resultado : al lugar!

y en el medio :

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

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

Resultado : vamos a la

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.