entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Expresiones regulares

Hola a todos tengo una duda, es posible por medio de una expresión regular lo siguiente que les planteo

Tengo los siguientes texto que representa la estructura HTML, los dos primeros son especifico, es decir, esta buscando el nodo con el id 'menu' y el otro el nodo li con la clase 'select', y el otros es general necesita obtener todos los li que están dentro del menu.

1- '#menu'
2- '#menu ul li.select
3- '#menu ul li'

Entonces la duda es. Es posible que con una expresión regular separar en un array la consulta que el quiere la general y la especifica por ejemplo

['#menu', '#menu ul li.select', '#menu ul li']

un ejemplo mas real se envía lo siguiente '#menu ul', entonces la expresión regular retornaría esto

['', '', '#menu ul']

No se si me hago entender pero si me pueden ayudar seria genial!

gracias

Editado
Esta fue la expresión regular que fui capaz de construir

/#([\w-.]+)|([\s\w\s]+)|([\w-.]+)/g
'#menu.data ul li .select'.match(/#([\w-.]+)|([\s\w\s]+)|([\w-.]+)/g)
// => ["#menu.data", " ul li ", ".select"]

Me falta obtener el elemento en la segunda posición del array que venga sin los espacios.
si alguien propone otra solución seria de mucha ayuda :)
Pruebas...

0voto

white comentado

veamos si te entiendo, quieres obtener de un texto elementos con clase o id y elementos sin estos atributos?

por ejemplo del texto: #menu div ul li span.select lorem ipsum #menu2 loremp ipsum

obtener:
#menu div ul li span.select y #menu2 en un arreglo?

0voto

Jonattan comentado

Si la idea es mandar una consulta para obtener los elementos de una pagina html (como hace jquery) por medio de javascript. pero siempre iniciando por un ID es decir #menu - #test...

0voto

white comentado

Haber, el texto tiene etiquetas html? o es un texto con partes como esta: "#menu div ul"?

dame un ejemplo del texto de donde quieres extraer lo que mencionas. por que sigo sin entender bien lo que quieres

PD: talvez te refieres a hacer "Web scraping" a una pagina externa y obtener elementos de esta?

0voto

Jonattan comentado

si es html normal...

1 Respuesta

1voto

white Puntos75840

suponiendo que tengo un texto asi:

#menu div ul li span.select #test div span #main ul li.select

extraigo 'especificos' y 'generales'

var text = '#menu div ul li span.select #test div span #main ul li.select';
var regex = /(\#[a-z0-9_\-]+)*(\s[a-z0-9_\-]+)?(\s[a-z0-9_\-]+(\.[a-z0-9_\-]+)?)*/ig;
var reg_specific = /[a-z0-9_\-]+(\.|\#)[a-z0-9_\-]+$/i;
var obj = {
    especificos : [],
    generales : []
};
var match = text.match(regex);

for(var m in match)
{
    if(match[m] == "" || match[m] == null)
        continue;

    if(match[m].match(reg_specific))
        obj.especificos.push(match[m]);
    else
        obj.generales.push(match[m]);
}

console.log(obj);

Especificos [2]
0: '#menu div ul li span.select'
1: '#main ul li.select'

Generales [1]
0: '#test div span'

podria ser lo que quieres?

EDIT: si lo que querias era obtenerlo desde etiquetas html, hize este codigo tambien:
http://jsfiddle.net/b9nd26ts/3/

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta