正则表达式 - 匹配HTML代码的多行块

时间:2013-03-24 19:09:37

标签: html regex block match multiline

我的正则表达式有问题。我需要匹配HTML块。

示例 - 阻止此处:

<tr class="tr-list " data-id="XX">
    <td class="ip-img"><div class="gun-icon"></div><img src="https://example.com/images/stories/HCP/HCP_5.jpg"/></td>
    <td class="ip-name ip-sort">Hotel Complex Project</td>
    <td class="ip-price ip-sort">297.00</td>
    <td class="ip-earnings ip-sort">43</td>
    <td class="ip-shares ip-sort">86</td>
    <td class="ip-status {'sorter':'currency'}"><img
            src="/img/assets/arrow1.png" title="0.989990234375"/></td>
    <td class="ip-blank-right"></td>
</tr>

这些HTML块中的每一个都应该单独匹配,然后我想从中提取其他数据(例如ip-name,ip-price,ip-earnings ..)。

但我现在的正则表达式匹配所有内容,直到“(?=)” - 部分不再是真的: http://regexhero.net/tester/?id=2b491d15-ee83-4dc7-8fe9-62e624945dcf

我需要更改以使每个块都匹配?

问候! :)

PS:希望我的意思是可以理解的......

3 个答案:

答案 0 :(得分:2)

这应该得到所有tr行:

<tr class="tr-list[\s\S]+?</tr>

这应该得到列的匹配组的所有tr行:

<tr class="tr-list[^<]*?<td class="ip-img">(.*?)</td>\s*<td class="ip-name.*?">(.*?)</td>\s*<td class="ip-price.*?">(.*?)</td>\s*<td class="ip-earnings.*?">(.*?)</td>\s*<td class="ip-shares.*?">(.*?)</td>\s*<td class="ip-status.*?">([\s\S]*?)</td>[\s\S]+?</tr>

答案 1 :(得分:0)

嵌套的html将需要来自正则表达式匹配的嵌套数组 它可以使用jquery完成,也可以使用正则表达式手动生成树

答案 2 :(得分:0)

这个正则表达式将捕获一个非自我封闭的整个html块:

var hmtlText="<div bar='baz'>foo</foo>";
var pattern = /<([\w]+)( (( +)?[\w]+=['"](\w+)?['"])?)+( )?(\/)?>((([\t\n\r\s]+)?)+(((.)+)?)+((\10)?)+)+?<\/(\1)>/igm;
console.log((pattern.test(htmlText) ? 'valid' : 'invalid') + ' html block');