Foros del Web » Programando para Internet » Javascript »

Exprecion regular para palabras y literales

Estas en el tema de Exprecion regular para palabras y literales en el foro de Javascript en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original var txt = "hola SOY 'un texto ' formado-por \" palabras, comillas & otros caractes \" Y-GUIONES" ; ...
  #1 (permalink)  
Antiguo 09/04/2014, 06:51
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Exprecion regular para palabras y literales

Código Javascript:
Ver original
  1. var txt = "hola SOY 'un texto ' formado-por \"palabras, comillas & otros caractes \" Y-GUIONES";
  2.  
  3. // Quiero una exprecion regular para poner aca.
  4. var tmp = txt.replace(//g,function(){
  5.  
  6. // que acompañada (o no) de unas lineas de codigo, me permita obtener:
  7. // var matches = ["hola", "SOY", "'un texto '", "formado-por", "\"palabras, comillas & otros caractes \"", "Y-GUIONES"];
  8.  
  9. // Es decir, las palabras que estan separadas por espacios, pero no encerradas entre comillas que pueden ser letras, numeros o giones, nada mas, y lo que esta entre comillas simples o dobles que en su interior pueden contener cualquier cosa, o estar vacias.
  10. });

Alguien podria ayudarme?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #2 (permalink)  
Antiguo 09/04/2014, 17:51
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Exprecion regular para palabras y literales

buenas,

muestra lo que haz intentado hasta el momento... no parece tan complicado. aún si te parece complicado, quizas lo más conveniente es que lo hagas por otros métodos involucrando lo más mínimo expresiones regulares.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 09/04/2014, 18:27
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Exprecion regular para palabras y literales

Hola, lo tengo hecho con una funcion medio horrorosa, lo que hago es enviar toda la cadena de txt como primer parametro a esta funcion:
Código Javascript:
Ver original
  1. parseArrayParams :  function (str, newP)    
  2.     {
  3.         (newP != undefined) || (newP = true);
  4.         var prt = str.split('');
  5.         var pos;
  6.         var inText = '';
  7.         var scape = false;
  8.         str = '';
  9.         for(pos=0;pos<prt.length;pos++)
  10.         {
  11.             if(newP && inText == '' && prt[pos] != ' ')
  12.             {
  13.                 str += ', ';
  14.                 newP  = false;
  15.             }
  16.             if(inText != '' && scape)
  17.             {
  18.                 str += prt[pos];
  19.                 scape = false;
  20.             }
  21.             else if(inText != '' && prt[pos] == "\\")
  22.             {
  23.                 scape=true;
  24.                 str += prt[pos];
  25.             }
  26.             else if(prt[pos] == '"' || prt[pos] == '\'')
  27.             {
  28.                 if(inText == '')
  29.                     inText = prt[pos];
  30.                 else if(inText == prt[pos])
  31.                     inText = '';
  32.                 str += prt[pos];
  33.             } else if(prt[pos] != ' ' && inText == '')
  34.             {
  35.                 newP = false;
  36.                 str += prt[pos];
  37.             } else if(prt[pos] == ' ' && inText == '')
  38.                 newP = true;
  39.             else if(inText != '')
  40.                 str += prt[pos];                           
  41.         }
  42.         return str;
  43.     }

Quiero la exprecion regular para dejar de utilizarla, pero no se me ocurre como puedo hacerlo, si fueran palabras comunes usaria ([\w-]+) pero lo que me complica es que pueden haber palabras con comillas, si a ti te parece que no es complicado, podrias por favor ayudarme a armarla? no sera mas de un renglon
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 09/04/2014, 19:58
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Exprecion regular para palabras y literales

para la expresión regular, basicamente una expresión global (flag g) con un OR ( | ). a un lado del OR, buscas palabras que estan separadas por espacios en blanco. al otro lado del OR, buscas comillas simples o dobles seguido por una secuencia de cualquier caracter (metacaracter de punto) y otra comilla igual a la incial. para esto último, tienes que crear una referencia de la comilla coincidida al incio (encerrando entre paréntesis) y usar esa referencia mediante una diagonal invertida y el número correspondiente de acuerdo al número de grupos en la expresión.

ahí te he explicado textualmente lo que tienes que hacer. trata de ensamblarlo.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 09/04/2014, 21:39
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Exprecion regular para palabras y literales

Muchas gracias, era sencillo despues de todo, aunque sin tu ayuda hubiese tardado mucho mas en lograrlo.

al final me quedo asi:

Código Javascript:
Ver original
  1. var txt = "hola SOY 'un texto ' formado-por \"palabras, comillas & otros caractes \" Y-GUIONES";
  2.             txt.replace(/(([\w-]+)|("(.*)"+)|('(.*)'+)+)/g, function(a){
  3.                 console.log(a);
  4.                
  5.                 return '';
  6.             });

funciona bien, aunque:

Cita:
para esto último, tienes que crear una referencia de la comilla coincidida al incio (encerrando entre paréntesis) y usar esa referencia mediante una diagonal invertida
no tengo idea lo que me quisiste decir con esa parte, esta bien como lo hice o tu pensabas en otra forma?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #6 (permalink)  
Antiguo 10/04/2014, 12:20
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Exprecion regular para palabras y literales

parcialmente era lo que te indicaba. aunque si te ha funcionado, pues bien. veamos lo que te explicaba...

una expresión global (flag g) con un OR ( | )
/|/g

a un lado del OR, buscas palabras que estan separadas por espacios en blanco
\b[\w\-]+\b > /|\b[\w\-]+\b/g

al otro lado del OR, buscas comillas simples o dobles seguido por una secuencia de cualquier caracter (metacaracter de punto) y otra comilla igual a la incial
'|".+?'|" > /'|".+?'|"|\b[\w\-]+\b/g

tienes que crear una referencia de la comilla coincidida al incio (encerrando entre paréntesis)
('|").+?'|" > /('|").+?'|"|\b[\w\-]+\b/g

usar esa referencia mediante una diagonal invertida y el número correspondiente de acuerdo al número de grupos en la expresión
('|").+?\1 > /('|").+?\1|\b[\w\-]+\b/g
nótese la sútil diferencia de esta línea con la anterior. en este caso, el orden secuencial de grupos que agrupa las comillas corresponde al primero. por tanto, la referencia es \1.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: palabras, regular
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 17:21.