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

212
Vistas
estoy usando la función regex pero no funcionó?

Cuando uso la función regex para el título y el subtítulo, funciona, pero cuando agrego más etiquetas coincidentes, no funciona

aquí está el código a continuación que funciona bien sin ningún problema

 $(".sidebar").each(function() { var e = $(this), t = e.find(".widget").text(); if (t) { var a = t.match(/title=\(([^)]*)\)\s+caption=\(([^)]*)\)/); alert(t); } });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class='sidebar'> <div class='widget'>title=(example1) caption=(example2)</div> </div>

Pero el problema es que cuando trato de usar varias etiquetas coincidentes, no funciona como

 <div class='widget'>title=(example1) caption=(example2) button=(example3) price=(example4) off=(example5)</div>

Intenté usar expresiones regulares como las anteriores para estos valores, pero no funcionó.

También quiero agregar estos ejemplos de texto y el aspecto de Salida es ejemplo 1 ejemplo 2 ejemplo 3 ejemplo 4 ejemplo 5 pero no tengo idea de cómo hacerlo con la función regex

cualquier ayuda o consejo es muy apreciado

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

0

En lugar de usar match() , considere usar exec() , que también le permitirá acceder a los grupos de captura. Idealmente, su grupo de captura debería capturar el valor dentro del paréntesis que viene después del carácter = , para que pueda escribir su patrón de expresión regular como tal:

 var re = /\w+?=\((.*?)\)/gi;

Luego, es simplemente una cuestión de ejecutar un ciclo while para invocar recursivamente el método exec() hasta que no se encuentren más coincidencias:

 $(".sidebar").each(function() { var e = $(this); var t = e.find(".widget").text(); if (t) { var result; var results = []; var re = /\w+?=\((.*?)\)/gi; while ((result = re.exec(t)) !== null) { console.log(result[1]); results.push(result[1]); } console.log('Logging all captured values:\n', results); } });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class='sidebar'> <div class='widget'>title=(example1) caption=(example2) button=(example3) price=(example4) off=(example5)</div> </div>

Aún mejor: ni siquiera necesitas jQuery para esto:

 document.querySelectorAll('.sidebar .widget').forEach(el => { const t = el.innerText.trim(); if (t) { let result; const results = []; const re = /\w+?=\((.*?)\)/gi; while ((result = re.exec(t)) !== null) { console.log(result[1]); results.push(result[1]); } console.log('Logging all captured values:\n', results); } });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class='sidebar'> <div class='widget'>title=(example1) caption=(example2) button=(example3) price=(example4) off=(example5)</div> </div>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Aquí hay un ejemplo de cómo obtener cualquier valor dado este formato:

Empareja cualquier cosa que no sea a ) una o más veces .
Debe ir precedido de \w+=(
y debe ir seguido de )

Mejor explicado en este ejemplo Regex101

 $(".sidebar").find(".widget").each(function() { const txt = $.trim($(this).text()); // Get trimmed text if (!txt) return; // Do nothing const matches = txt.match(/(?<=\b\w+=\()[^)]+(?=\))/g)||[]; matches.forEach(m => { console.log(m); }); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class='sidebar'> <div class='widget'>title=(example1) caption=(example2) button=(example3) price=(example4) off=(example5)</div> <div class="widget">ola</div> <div class="widget"></div> <div class="widget">The magic happens=(here) :)</div> </div>

about 4 years ago · Juan Pablo Isaza Denunciar

0

En tu código, usas alert(t); que es el resultado de t = e.find(".widget").text();

Si usa el resultado de var a = t.match(/title=\(([^)]*)\)\s+caption=\(([^)]*)\)/); luego, la expresión regular devolverá una coincidencia para title= y caption= que tienen un valor en un grupo de captura, pero la coincidencia debe estar en ese orden.

Obtendrá una sola coincidencia ya que no hay un indicador /g , y también hay solo 1 ocurrencia en los datos de ejemplo.

Lo que podría hacer es hacer que su expresión sea un poco menos restrictiva y, en lugar de hacer coincidir específicamente el título y la captura, haga coincidir 1 o más caracteres que no sean espacios en blanco que no sean un signo igual.

Utilice el indicador /g para obtener todas las coincidencias en lugar de una única coincidencia.

 [^\s=]+=\(([^)]*)\)
  • [^\s=]+ Coincide 1+ veces con cualquier carácter que no sea = o un carácter de espacio en blanco
  • = Coincide literalmente
  • \( Partido (
  • ([^)]*) Capture en el grupo 1 caracteres opcionales que no sean ) o use + en lugar de * para 1 o más
  • \) Partido )

Una demostración de expresiones regulares para ver los valores de grupo capturados:

 $(".sidebar").each(function() { var e = $(this), t = e.find(".widget").text(); if (t) { var a = t.matchAll(/[^\s=]+=\(([^)]*)\)/g); console.log(Array.from(a, m => m[1])); } });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class='sidebar'> <div class='widget'>title=(example1) caption=(example2) button=(example3) price=(example4) off=(example5)</div> </div>

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