Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

213
Vistas
¿Cómo agregar expresiones regulares para diferentes valores opcionales?

Estoy trabajando en un proyecto en el que trabajo con la función regex.

Aquí está mi código en jsFiddle

Mi propio código JsFiddle

y el HTML está aquí

 <div class="post-body"> <a href='/'>color=(green) title=(Hello World) caption=(Hello City 2) post=(New)</a> </div>

y js está aquí

 $(".post-body").each(function() { var e = $(this), t = e.find("a").text(); if (t) { var a = t.match(/title=\(([^)]*)\)\s+caption=\(([^)]*)\)/); if (a) { var s = a[1]; 0 != s && e.find("a").text(s), 0 != i && e.find("a").text(i) } } });

Este código funciona bien, pero cuando pongo color y publico valores, el código deja de funcionar.

No sé por qué no se muestran todos los valores como My World Hello City 2 New ?

A continuación, cuando traté de poner valores, el código no funciona, también quiero que haya opciones para que podamos usar un valor o todos los valores, como solo el uso de dos valores, título y título en este caso, o nosotros puede usar todos los valores como color=(green) title=(Hello World) caption=(Hello City 2) post=(New)

 $(".post-body").each(function() { var e = $(this), t = e.find("a").text(); if (t) { var a = t.match(/title=\(([^)]*)\)\s+caption=\(([^)]*)\)\s+post=\(([^)]*)\)\s+color=\(([^)]*)\)\s+content=\(([^)]*)\)\s+size=\(([^)]*)\)/); if (a) { var s = a[1], i = a[2]; m = a[3]; n = a[4]; z = a[5]; y = a[6]; 0 != s && e.find("a").text(s), 0 != i && e.find("a").text(i), 0 != m && e.find("a").text(m), 0 != n && e.find("a").text(n), 0 != z && e.find("a").text(z), 0 != y && e.find("a").text(y) } } });

En la investigación, encontré un código creado por alguien que funciona bien, tal vez sea útil para solucionar mi problema

Código JsFiddle de trabajo

Pero estoy tratando de crear mi propio código genuino pero no funciona. Espero aquí conseguir alguna solución. ¡Cualquier tipo de ayuda es muy apreciada!

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede usar esta expresión regular para que coincida con todos los campos existentes en su sintaxis como esta /(?:([a-zA-Z]{3,})+=\(([^)]*)\))/g y use matchAll para colocarlos todos en una matriz y recorra la matriz de esta manera si desea mostrar los resultados en alguna parte:

 $(".post-body").each(function() { var e = $(this), t = e.find("a").text(); if (t) { var a = [...t.matchAll(/(?:([a-zA-Z]{3,})+=\(([^)]*)\))/g)]; if (a) { a.map(function(item, key){ console.log(item) let k = item[1]; let v = item[2]; $("#results").append(`<span>${v}</span>`); }); } } });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="post-body"> <a href='/'>color=(green) title=(Hello World) caption=(Hello City 2) post=(New) title=(Hello World 3)</a> </div> <br /> <div id="results"> </div>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Wow, ¡fue un proceso difícil! Presencié cuando @freedomn-m trató de adivinar cuáles eran tus intenciones y la forma en que pasó mucho tiempo escribiendo una respuesta y explicándotela. Todo este doloroso asunto podría haberse evitado si hubiera proporcionado un claro ejemplo mínimo reproducible . Los fragmentos externos como el de jsfiddle son de poca ayuda aquí. Tampoco funcionarán razonablemente en pantallas más pequeñas (como en los teléfonos inteligentes) y a muchos usuarios de SO les gusta responder preguntas en estos dispositivos.

¡Felicitaciones y "+1" a @JoseLora por adivinar lo que querías!

Al final, todo el guión se puede acortar esencialmente en una sola línea (para una mejor legibilidad, lo divido en cuatro líneas aquí):

 document.getElementById("result").textContent= [...document.querySelector(".post-body a") .textContent.matchAll(/([a-zA-Z]{2,})\s*=\s*\(([^)]*)\)/g)] .map(e=>e[2]).join(" - ");
 <div class="post-body"> <a href='/'>color=(green) title=(Hello World) caption=(Hello City 2) post=(New)</a> </div> <div id="result"></div>

También cambié un poco la expresión regular (eliminé un grupo superfluo que no captura y agregué \s* antes y después de = para que sea más tolerante en caso de que haya espacios en blanco que deban ignorarse.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda