我设法编写了这个正则表达式,用于从td
标记获取内部html,
<td[^>]*>(.*?)<\/td>
工作正常。除外,忽略匹配中的td标记。我只想获得innerHTML
,而不是outerHTML
。你可以找到我的问题here的演示。
任何人都可以帮助我在td
代码之间获取文字吗?
P.S 我在这里操纵一个字符串而不是一个html元素。
答案 0 :(得分:1)
甚至使用DOM来解析HTML字符串。对于正则表达式保持有效而言,HTML可能太棘手了。
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;
答案 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>') );
此致