Javascript-获取字符串中的字符串 var-str=' ... 文本 ... ';

Javascript-获取字符串中的字符串 var-str=' ... 文本 ... ';,javascript,regex,Javascript,Regex,我在var str中存储了一个长字符串,我需要提取div part=“1”中的字符串。你能帮我吗 您可以创建一个DOM元素,并将其innerHTML设置为字符串。 然后可以遍历子节点并读取所需的属性;) 范例 var str = '<div part="1"> <div> ... <p class="so">text</p> ... </div> </

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

您可以创建一个DOM元素,并将其innerHTML设置为字符串。 然后可以遍历子节点并读取所需的属性;)

范例

var str = '<div part="1">
    <div>
            ...
        <p class="so">text</p>
            ...
    </div>
</div><span></span>';
var-str=”“;
var节点=document.createElement(“div”);
node.innerHTML=str;
对于(var i=0;i
您可以创建一个DOM元素,并将其innerHTML设置为字符串。 然后可以遍历子节点并读取所需的属性;)

范例

var str = '<div part="1">
    <div>
            ...
        <p class="so">text</p>
            ...
    </div>
</div><span></span>';
var-str=”“;
var节点=document.createElement(“div”);
node.innerHTML=str;
对于(var i=0;i
如果您使用的是JQuery这样的库,这非常简单,而不必经历使用正则表达式解析HTML的可怕过程

只需将字符串加载到JQuery对象中;然后您可以使用选择器查询它。就这么简单:

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"));
}
获取
class='so'
元素

如果要获取
part='1'
中的所有文本,则如下所示:

var so = $(str).find('.so');
使用原型库或其他工具也可以获得类似的结果。在没有任何库的情况下,您仍然可以使用DOM做同样的事情,但这将是非常困难的工作

为了澄清为什么在正则表达式中执行此类操作是个坏主意:

是的,可以做到。可以使用正则表达式扫描HTML代码块并在字符串中查找内容

然而,问题是HTML太多变了——它被定义为一种非常规语言(请记住,'regex'中的'reg'代表'regular')

如果你知道你的HTML结构看起来总是一样的,那就相对容易了。然而,如果传入的HTML可能包含与您期望的完全不同的元素或属性,那么编写正则表达式突然变得极其困难,因为正则表达式是为在可预测的字符串中搜索而设计的。当您考虑到被给予无效HTML代码进行解析的可能性时,难度因素会增加得更多

通过大量的努力和对regex更为深奥的部分的理解,它可以以合理的可靠性完成。但它永远都不会完美——如果你的正则表达式中有它不期望的东西,那么它总是有可能不起作用


相比之下,使用DOM解析它要简单得多——正如所演示的,使用正确的库,它可以是一行代码(并且非常容易阅读,不像您需要编写的可怕的正则表达式)。它的运行效率也会更高,并使您能够在同一块HTML上执行其他搜索操作,而无需再次对其进行重新解析。

如果您使用的是JQuery之类的库,则无需经历使用正则表达式解析HTML的可怕过程,这一过程就非常简单

只需将字符串加载到JQuery对象中;然后您可以使用选择器查询它。就这么简单:

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"));
}
获取
class='so'
元素

如果要获取
part='1'
中的所有文本,则如下所示:

var so = $(str).find('.so');
使用原型库或其他工具也可以获得类似的结果。在没有任何库的情况下,您仍然可以使用DOM做同样的事情,但这将是非常困难的工作

为了澄清为什么在正则表达式中执行此类操作是个坏主意:

是的,可以做到。可以使用正则表达式扫描HTML代码块并在字符串中查找内容

然而,问题是HTML太多变了——它被定义为一种非常规语言(请记住,'regex'中的'reg'代表'regular')

如果你知道你的HTML结构看起来总是一样的,那就相对容易了。然而,如果传入的HTML可能包含与您期望的完全不同的元素或属性,那么编写正则表达式突然变得极其困难,因为正则表达式是为在可预测的字符串中搜索而设计的。当您考虑到被给予无效HTML代码进行解析的可能性时,难度因素会增加得更多

通过大量的努力和对regex更为深奥的部分的理解,它可以以合理的可靠性完成。但它永远都不会完美——如果你的正则表达式中有它不期望的东西,那么它总是有可能不起作用


相比之下,使用DOM解析它要简单得多——正如所演示的,使用正确的库,它可以是一行代码(并且非常容易阅读,不像您需要编写的可怕的正则表达式)。它的运行效率也会更高,并使您能够在同一块HTML上执行其他搜索操作,而无需重新解析所有内容。

不要使用正则表达式解析HTML。请看一看不要使用正则表达式解析HTML。另外,请看一看,因为他需要整个文本,他可以使用
var text=node.textContent | | node.innerText。此外,由于他需要整个文本,他可以使用
var text=node.textContent | | node.innerText