var str = '<div part="1">
<div>
...
<p class="so">text</p>
...
</div>
</div><span></span>';
我有一个存储在var str中的长字符串,我需要提取div part =“1”中的字符串。你能帮我吗?
答案 0 :(得分:6)
你可以创建一个DOM元素并将其innerHTML设置为你的字符串。 然后你可以遍历childNodes并读取你想要的属性;)
例如
var str = "<your><html>";
var node = document.createElement("div");
node.innerHTML = str;
for(var i = 0; i < node.childNodes.length; i++){
console.log(node.childNodes[i].getAttribute("part"));
}
答案 1 :(得分:3)
如果你正在使用像JQuery这样的库,这很容易,而不必经历使用正则表达式解析HTML的恐怖。
只需将字符串加载到JQuery对象中;那么你将能够使用选择器查询它。就这么简单:
var so = $(str).find('.so');
获取class='so'
元素。
如果你想获得part='1'
中的所有文字,那就是:
var part1 = $(str).find('[part=1]').text();
使用Prototype库或其他方法可以获得类似的结果。没有任何库,你仍然可以使用DOM做同样的事情,但这将是更难的工作。
只是为了澄清为什么在正则表达式中做这种事情是个坏主意:
是的,可以完成。 可以用正则表达式扫描一段HTML代码,并在字符串中查找内容。
然而,问题是HTML变量太大 - 它被定义为非常规语言(请记住'正则表达式'中的'reg'是'常规')。
如果您知道您的HTML结构总是看起来一样,那就相对容易了。但是,如果传入的HTML可能包含除了您期望的精确元素或属性之外的元素或属性,那么突然编写正则表达式变得非常困难,因为正则表达式设计用于搜索可预测的字符串。当您考虑到无法解析HTML代码的可能性时,难度系数会进一步增加。
通过大量精力和对正则表达式更深奥部分的深入理解,可以通过合理程度的可靠性来完成。但它永远不会是完美的 - 如果你的正则表达式被它所预期的东西所充满,那么你的正则表达式总是有可能不起作用。
相比之下,使用DOM解析它要简单得多 - 正如所示,使用正确的库,它可以是一行代码(并且非常容易阅读,不像您需要编写的可怕的正则表达式)。它的运行效率也会高得多,并且您可以在同一块HTML上执行其他搜索操作,而无需再次重新解析它。