我意识到有很多关于在某些东西之间获取内容的问题,甚至是特定的HTML标签。但我的要求不同,因为如果存在嵌套标签,我不会忽略<td></td>
内容。如果仍然有重复,请标记并指出我。
示例输入:<td><p>column1</p></td><td>column2</td>
预期输出:column2(太棒了!)或&gt; column2&lt;
根据this问题,我尝试了<td>(.*?)<\/td>
并获得了2场比赛:
<td><p>column1</p></td>
<td>column2</td>
根据明确的答案,我尝试了>[^<]*<
并得到了这个:
那已经结束了。得到&gt;我很好和&lt;但我希望正则表达式忽略1st <td>
,因为它嵌套在<p>
内。
假设:<p>
将始终是嵌套情况下最内层的标记。如果输入为<td><p>column1</p>postfix</td>
,请忽略此类<td>
。
答案 0 :(得分:3)
您不应该使用正则表达式来解析HTML,因为HTML不是常规语言。这是Try code snippet here。
你可以做的是使用浏览器的内置解析器,然后使用DOM方法获得你想要的东西。
var s = '<td><p>column1</p></td><td>column2</td>'
var content = [];
// Create a row to insert the markup into
var tr = document.createElement('tr');
tr.innerHTML = s;
// Get the cells
var tds = tr.cells;
// If a cell doesn't have any element content, put its
// textContent into array
for (var i=0, iLen = tds.length; i<iLen; i++) {
if (tds[i].children.length == 0) {
content.push(tds[i].textContent);
}
}
console.log(content);
答案 1 :(得分:1)
var html='<td><p>column1</p></td><td>column2</td>';
var regex=/<td>([^<]*)<\/td>/ig;
var result=regex.exec(html);
console.info(result);
console.info(result[1]);
&#13;
你可以试试这个。结果[1]你想要的。 如果你想替换标签之间的内容,你也可以这样写:
var html='<td><p>column1</p></td><td>column2</td>';
var regex=/<td>([^<]*)<\/td>/ig;
var newHtml=html.replace(regex,function(){
return '<td>'+'replacement'+'</td>';
});
console.info(newHtml);
&#13;