Foros del Web » Programando para Internet » Javascript »

Separar cadena

Estas en el tema de Separar cadena en el foro de Javascript en Foros del Web. Hola, tengo cadenas del tipo 11:45pm o 2:30am, lo que necesito es que me quede por un lado la hora y por el otro el ...
  #1 (permalink)  
Antiguo 18/11/2016, 10:08
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Separar cadena

Hola, tengo cadenas del tipo 11:45pm o 2:30am, lo que necesito es que me quede por un lado la hora y por el otro el am o pm, como deberia hacerlo?. Tambien me serviria insertar un espacio entre hambos valores, para que quede asi: 11:45 pm o 2:30 am. Muchas gracias!
  #2 (permalink)  
Antiguo 18/11/2016, 10:31
Avatar de Ito79  
Fecha de Ingreso: diciembre-2013
Mensajes: 71
Antigüedad: 10 años, 4 meses
Puntos: 18
Respuesta: Separar cadena

Hola,
Te podría valer con esto, lo que hace es buscar la letra "a", si la encuentra corta la cadena entre el inicio y esa letra, y lo concatena con el resto de la cadena metiendo un espacio en blanco (y hace lo mismo si no encuentra la "a" pero con la "p").

Código Javascript:
Ver original
  1. var cadena = "1:45am";
  2. if (cadena.indexOf('a')>-1) {
  3.     cadena = cadena.substring(0, cadena.indexOf('a'))+ ' '+ cadena.substring(cadena.indexOf('a'), cadena.length);
  4. } else if (cadena.indexOf('p')>-1) {
  5.     cadena = cadena.substring(0, cadena.indexOf('p'))+ ' '+ cadena.substring(cadena.indexOf('p'), cadena.length);
  6. }
  7. alert(cadena);

Se puede optimizar seguramente, pero para que te hagas una idea creo q te puede servir.

EDITO: Justo cuando le di a enviar me vino a la cabeza el cortar desde 0 hasta dos posiciones antes del final, creo que es más claro así, lo pongo:
Código Javascript:
Ver original
  1. var cadena = "1:45am";
  2. alert(cadena.substring(0, cadena.length-2)+' '+ cadena.substring(cadena.length-2, cadena.length));
  3. alert(cadena);

Un saludo
Ito
  #3 (permalink)  
Antiguo 18/11/2016, 10:43
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Separar cadena

Funciono genial Ito!. Muchisimas gracias.



Cita:
Iniciado por Ito79 Ver Mensaje
Hola,
Te podría valer con esto, lo que hace es buscar la letra "a", si la encuentra corta la cadena entre el inicio y esa letra, y lo concatena con el resto de la cadena metiendo un espacio en blanco (y hace lo mismo si no encuentra la "a" pero con la "p").

Código Javascript:
Ver original
  1. var cadena = "1:45am";
  2. if (cadena.indexOf('a')>-1) {
  3.     cadena = cadena.substring(0, cadena.indexOf('a'))+ ' '+ cadena.substring(cadena.indexOf('a'), cadena.length);
  4. } else if (cadena.indexOf('p')>-1) {
  5.     cadena = cadena.substring(0, cadena.indexOf('p'))+ ' '+ cadena.substring(cadena.indexOf('p'), cadena.length);
  6. }
  7. alert(cadena);

Se puede optimizar seguramente, pero para que te hagas una idea creo q te puede servir.

EDITO: Justo cuando le di a enviar me vino a la cabeza el cortar desde 0 hasta dos posiciones antes del final, creo que es más claro así, lo pongo:
Código Javascript:
Ver original
  1. var cadena = "1:45am";
  2. alert(cadena.substring(0, cadena.length-2)+' '+ cadena.substring(cadena.length-2, cadena.length));
  3. alert(cadena);

Un saludo
Ito
  #4 (permalink)  
Antiguo 18/11/2016, 11:13
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Separar cadena

También puedes usar expresiones regulares y el método .replace():
Código Javascript:
Ver original
  1. cadena.replace(/(\d{1,2}:\d{2})([a-z]{2})/, "$1 $2");

Y para no volver a escribir lo mismo por cada hora, puedes utilizar una función o asociar un nuevo método al objeto String:
Código Javascript:
Ver original
  1. String.prototype.space = function(){
  2.     return this.replace(/(\d{1,2}:\d{2})([a-z]{2})/, "$1 $2")
  3. };
  4.  
  5. var a = "11:45pm", b = "2:30am";
  6.  
  7. console.log(a.space()); //11:45 pm
  8. console.log(b.space()); //2:30 am

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 18/11/2016, 11:52
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Separar cadena

Muchas gracias Alexis!, y cual seria la forma mas optima de hacerlo?, yo lo tengo dentro de un bucle por lo que no tengo q escribir cada vez, pero en cuanto a velicidad que seria lo mejor?. Muchas gracias!!



Cita:
Iniciado por Alexis88 Ver Mensaje
También puedes usar expresiones regulares y el método .replace():
Código Javascript:
Ver original
  1. cadena.replace(/(\d{1,2}:\d{2})([a-z]{2})/, "$1 $2");

Y para no volver a escribir lo mismo por cada hora, puedes utilizar una función o asociar un nuevo método al objeto String:
Código Javascript:
Ver original
  1. String.prototype.space = function(){
  2.     return this.replace(/(\d{1,2}:\d{2})([a-z]{2})/, "$1 $2")
  3. };
  4.  
  5. var a = "11:45pm", b = "2:30am";
  6.  
  7. console.log(a.space()); //11:45 pm
  8. console.log(b.space()); //2:30 am

  #6 (permalink)  
Antiguo 18/11/2016, 12:26
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Separar cadena

Las expresiones regulares suelen ser el medio más rápido para hacer una búsqueda, ya sea en una cadena o en un conjunto de ellas.

Aquí puedes ver los resultados del benchmark.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 25/11/2016 a las 20:54 Razón: Benchmark

Etiquetas: cadena
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:42.