2011-10-23 171 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