2011-10-23 13 views
8

ho bisogno di abbinare con un javascript RegExp la stringa: bimbo999 da questo un tag: <a href="/game.php?village=828&amp;screen=info_player&amp;id=29956" >bimbo999</a>Javascript RegExp partita testo tra <a> tag

I numeri da URL Vars (villaggio e id) stanno cambiando ogni volta, quindi devo abbinare i numeri in qualche modo 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"> 

ho provato con questo:

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

ma non sta funzionando. Ragazzi potete aiutarmi?

+2

Perché stai manipolando l'HTML direttamente? È molto più sicuro (e solitamente più semplice) lavorare attraverso il DOM. Trova il giusto '

', quindi i tag appropriati '' nella tabella usando jQuery o una libreria di selettori cross-browser come Sizzle e poi ottieni l'innerHTML del tag '' per ottenere bimbo999. – jfriend00

+0

L'uso di espressioni regolari per attraversare i tag html non è una buona pratica. Hai provato a creare un elemento DOM dal tag e ottenere innerHTML? – Jerry

risposta

22

Prova questo:

/<a[^>]*>([\s\S]*?)<\/a>/ 
  • <a[^>]*> corrisponde l'apertura a tag
  • ([\s\S]*?) partite ogni carattere prima del tag di chiusura, il meno possibile
  • <\/a> partite il tag di chiusura

([\s\S]*?) acquisisce il testo tra i tag come argomento 1 nella matrice restituita da una chiamata exec o match.

Questo è veramente buono solo per trovare testo all'interno a elementi, non è incredibilmente sicura o affidabile, ma se hai una grande pagina di link e basta loro testo, questo lo farà.


Un modo molto più sicuro di fare questo senza RegExp sarebbe:

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>/'è utile anche per la corrispondenza con il prossimo tag di chiusura su più righe. – par

+0

Corrisponde a più righe già '\ s corrisponde a qualsiasi carattere di spazio bianco [\ r \ n \ t \ f]' –

3

Non ho esperienza con Regex, ma penso che è possibile utilizzare JQuery con .text()!

JQuery API - .text()

Voglio dire, se si utilizza:

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

Otterrete il vostro testo senza utilizzare Regex!

.find("a") e poi ti dà un elenco di s' tag oggetti e quindi utilizzare .each() loop su quella lista, allora si può ottenere il testo utilizzando .text() un.

Oppure puoi utilizzare un selettore di classe, un ID o qualsiasi cosa tu voglia!

+1

questo potrebbe anche essere fatto con javascript normale usando 'getElementsByTagName ('a')'. Non è una cattiva idea. – zzzzBov

+1

Come nota a margine, non è una buona idea usare regex per analizzare HTML :) – Ryan

Problemi correlati