2011-10-23 61 views
8

我需要配合一個javascript正則表達式的字符串之間的Javascript正則表達式匹配文本<a href="/game.php?village=828&amp;screen=info_player&amp;id=29956" >bimbo999</a><a>標籤

從URL瓦爾的數字(村和id)正在改變每一次,所以我必須以某種方式與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"> 

我試着用這樣的:

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

,但不工作。你們能幫我嗎?

+2

你爲什麼直接操縱HTML?通過DOM工作更安全(通常更容易)。在表格中找到合適的'

',然後在表格中使用jQuery或跨瀏覽器選擇庫(如Sizzle)的相應''標籤,然後獲取''標籤的innerHTML以獲得bimbo999。 – jfriend00

+0

使用正則表達式遍歷html標籤並不是很好的做法。你有沒有嘗試從標記中獲取DOM元素並獲取innerHTML? – Jerry

回答

22

試試這個:

/<a[^>]*>([\s\S]*?)<\/a>/ 
  • <a[^>]*>
  • ([\s\S]*?)匹配任何字符相匹配的開放a標籤的結束標記前,儘可能少
  • <\/a>匹配的結束標記

([\s\S]*?)將從標記execmatch返回的數組中的變量之間的文本捕獲爲參數1。

這是真的只爲發現內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> /'也可以方便地在多行上匹配下一個結束標籤。 – par

+0

它可以匹配多行,已經匹配任何空格字符[\ r \ n \ t \ f]' –

3

我沒有用正則表達式的經驗,但我認爲你可以使用jQuery與.text()

JQuery API - .text()

我的意思是,如果你使用:

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

你會得到你的文字,而無需使用正則表達式!

.find("a"),然後給你的列表的的標籤對象,然後用.each()來循環,列表上,則可以使用.text()獲取文本。

或者你可以使用類選擇器,ID或任何你想要的!

+1

這也可以使用'getElementsByTagName('a')'用普通的javascript來完成。不是一個壞主意。 – zzzzBov

+1

作爲一個方面的說明,它不是一個好主意,使用正則表達式來解析HTML :) – Ryan