Javascript - 在字符串中获取字符串

时间:2011-06-03 08:36:48

标签: javascript regex

var str = '<div part="1">
    <div>
            ...
        <p class="so">text</p>
            ...
    </div>
</div><span></span>';

我有一个存储在var str中的长字符串,我需要提取div part =“1”中的字符串。你能帮我吗?

2 个答案:

答案 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上执行其他搜索操作,而无需再次重新解析它。