正则表达式用于提取html标记之间的值

时间:2015-11-06 11:32:56

标签: javascript html regex

我设法编写了这个正则表达式,用于从td标记获取内部html,

<td[^>]*>(.*?)<\/td>

工作正常。除外,忽略匹配中的td标记。我只想获得innerHTML,而不是outerHTML。你可以找到我的问题here的演示。

任何人都可以帮助我在td代码之间获取文字吗?

P.S 我在这里操纵一个字符串而不是一个html元素。

2 个答案:

答案 0 :(得分:1)

甚至使用DOM来解析HTML字符串。对于正则表达式保持有效而言,HTML可能太棘手了。

&#13;
&#13;
var s = 'this is a nice day<table><tr><td>aaaa <b>bold</b></td></tr><tr><td>bbbb</td></tr></table> here.';
var doc = document.createDocumentFragment();
var wrapper = document.createElement('myelt');
wrapper.innerHTML = s;
doc.appendChild( wrapper );
arr = [];
var n,walk=document.createTreeWalker(doc,NodeFilter.SHOW_ALL,null,false);
while(n=walk.nextNode())
{
      if (n.nodeName.toUpperCase() === "TD") {
         arr.push(n.innerHTML); 
      }
}
// See it works:
console.log(arr); // or...
for (var r = 0; r < arr.length; r++) {
 document.getElementById("r").innerHTML +=  arr[r] + "<br/>";
}
&#13;
<div id="r"/>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你实际上已经拥有了所需的正则表达式。这只是你与捕获的混乱匹配。您的正则表达式匹配外部HTML,但它捕获内部。只需做一个匹配并获得第一个捕获组。请查看in this fiddle

这是代码

var s = '<table cellspacing="0px;" cellpadding="8px;"><tr><td align="right" style="padding-right:8px;line-height:18px;vertical-align:top;"><b>Import job summary</b></td><td align="left" style="max-width:300px;line-height:18px;vertical-align:top;"> 5 entries were imported successfully. 0 entries failed to import. </td></tr></table>',
    re = /<td[^>]*>(.*?)<\/td>/g,
    m = s.match(re),
    inner = ['No match'];

if (m.length>0) {
    // You have a capture
    inner = m;
}
document.write( 'Inner is:<br>' + inner.join('<br>') );

此致