如果没有嵌套标签,如何获取内容?

时间:2017-04-20 07:54:32

标签: javascript html regex

我意识到有很多关于在某些东西之间获取内容的问题,甚至是特定的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>

根据明确的答案,我尝试了>[^<]*<并得到了这个:

enter image description here

那已经结束了。得到&gt;我很好和&lt;但我希望正则表达式忽略1st <td>,因为它嵌套在<p>内。

假设<p>将始终是嵌套情况下最内层的标记。如果输入为<td><p>column1</p>postfix</td>,请忽略此类<td>

2 个答案:

答案 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)

&#13;
&#13;
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;
&#13;
&#13;

你可以试试这个。结果[1]你想要的。 如果你想替换标签之间的内容,你也可以这样写:

&#13;
&#13;
     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;
&#13;
&#13;

相关问题