2011-10-23 14 views
8

que necesito para que coincida con un javascript RegExp la cadena: bimbo999 de esta una etiqueta: <a href="/game.php?village=828&amp;screen=info_player&amp;id=29956" >bimbo999</a>Javascript RegExp texto partido entre <a> etiquetas

Los números de URL VARs (pueblo e id) están cambiando cada vez que lo que tengo que hacer coincidir los números de alguna manera con RegExp.

</tr> 
        <tr><td>Sent</td><td >Oct 22, 2011 17:00:31</td></tr> 
           <tr> 
         <td colspan="2" valign="top" height="160" style="border: solid 1px black; padding: 4px;"> 
          <table width="100%"> 
    <tr><th width="60">Supported player:</th><th> 
    <a href="/game.php?village=828&amp;screen=info_player&amp;id=29956" >bimbo999</a></th></tr> 
    <tr><td>Village:</td><td><a href="/game.php?village=828&amp;screen=info_village&amp;id=848" >bimbo999s village (515|520) K55</a></td></tr> 
    <tr><td>Origin of the troops:</td><td><a href="/game.php?village=828&amp;screen=info_village&amp;id=828" >KaLa I (514|520) K55</a></td></tr> 
    </table><br /> 

    <h4>Units:</h4> 
    <table class="vis"> 

he intentado con esto:

var match = h.match(/Supported player:</th>(.*)<\/a><\/th></i); 

pero no está funcionando. ¿Pueden ayudarme chicos?

+2

¿Por qué manipulas el HTML directamente? Es mucho más seguro (y generalmente más fácil) trabajar a través del DOM. Busque el '

' correcto, luego las etiquetas '' apropiadas en la tabla utilizando jQuery o una biblioteca de selección de navegadores cruzados como Sizzle y luego simplemente obtenga el innerHTML de la etiqueta '' para obtener bimbo999. – jfriend00

+0

El uso de expresiones regulares para atravesar etiquetas html no es una buena práctica. ¿Has intentado crear un elemento DOM a partir de la etiqueta y obtener innerHTML? – Jerry

Respuesta

22

Prueba esto:

/<a[^>]*>([\s\S]*?)<\/a>/ 
  • <a[^>]*> coincide con la apertura a etiqueta
  • ([\s\S]*?) equivale a cualquier caracter antes de la etiqueta de cierre, el menor número posible
  • <\/a> partidos de la etiqueta de cierre

El ([\s\S]*?) captura el texto entre las etiquetas como argumento 1 en la matriz devuelta por una llamada exec o match.

Esto es realmente sólo es bueno para encontrar texto dentro a elementos, no es muy segura y fiable, pero si usted tiene una gran página de enlaces y sólo tiene su texto, esto lo hará.


Una manera mucho más segura de hacer esto sin RegExp sería:

function getAnchorTexts(htmlStr) { 
    var div, 
     anchors, 
     i, 
     texts; 
    div = document.createElement('div'); 
    div.innerHTML = htmlStr; 
    anchors = div.getElementsByTagName('a'); 
    texts = []; 
    for (i = 0; i < anchors.length; i += 1) { 
     texts.push(anchors[i].text); 
    } 
    return texts; 
} 
+1

'/ ] *> ((?:. | \ R? \ N) *?) <\/a>/'también es útil para coincidir con la siguiente etiqueta de cierre en varias líneas. – par

+0

Coincide en varias líneas ya que '\ s coincide con cualquier carácter de espacio en blanco [\ r \ n \ t \ f]' –

3

no tengo experiencia con expresiones regulares, pero creo que se puede usar jQuery con .text()!

JQuery API - .text()

quiero decir que si usted utiliza:

var hrefText = $("a").text(); 

Usted recibirá su texto sin utilizar expresiones regulares!

.find("a") y luego le da una lista de un 's Etiquetas objetos y luego usar .each() de bucle en esa lista, entonces puede obtener el texto utilizando .text().

¡O puede utilizar un selector de clase, identificación o lo que desee!

+1

esto también se puede hacer con javascript normal usando 'getElementsByTagName ('a')'. No es una mala idea. – zzzzBov

+1

Como nota al margen, no es una buena idea usar expresiones regulares para analizar HTML :) – Ryan

Cuestiones relacionadas