2014-02-12 51 views
0

我有這樣的代碼:正則表達式匹配錶行具有多行

<table> 
    <tr class="odd"> 
     <td>&nbsp; 1</td> 
     <td>&nbsp; 1</td> 
     <td>&nbsp; 1</td> 
    </tr> 
    <tr> 
     <td>&nbsp; 2</td> 
     <td>&nbsp; 2</td> 
     <td>&nbsp; 2</td> 
    </tr> 
    <tr class="odd"> 
     <td>&nbsp; 3</td> 
     <td>&nbsp; 3</td> 
     <td>&nbsp; 3</td> 
    </tr> 
    <tr> 
     <td>&nbsp; 4</td> 
     <td>&nbsp; 4</td> 
     <td>&nbsp; 4</td> 
    </tr> 
</table> 

我試圖讓每個錶行內的內容與正則表達式

我的模式:<tr(?: class="odd")>[^]+</tr>

但它只匹配最後一個tr標記。

+0

你有沒有在任何地方的JavaScript? – Popo

+1

如何使用DOM或其​​他? – sln

+0

不知道JS,但在Perl中,'[^]'產生這個錯誤'[< - Unbalanced'['^]' – sln

回答

2

的正則表達式通常是貪婪的,所以它會發展爲正則表達式的</tr>部分之前儘可能多地匹配。您可以通過添加一個?,如勉強匹配:

<tr(?: class="odd")>[^]+?</tr> 

這麼說,我絕對與其他人的jQuery(以及其他工具)幾乎肯定是更好的解決方案達成一致。

+0

不錯,謝謝! –

0

一個選項是否使用jQuery而不是正則表達式?

$('table > tr').each(function() { 
    var trInnerHtml = $(this).html(); 
    alert(trInnerHtml); 
}); 
+0

它不是DOM,它只是一個字符串 –

+0

同意,你需要的不是jQuery如果你沒有文檔對象。 –