将页面源标记与正则表达式匹配

时间:2016-03-14 16:23:40

标签: html regex

我正在尝试使用正则表达式从页面源中捕获标记。 经过一番尝试后,我觉得很难建立起来。 以下是HTML源代码的示例:

<script>
    var xhttp;
    if (window.XMLHttpRequest){
        xhttp = new XMLHttpRequest();
    } else {
        xhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    var clientToken;
    xhttp.onreadystatechange = function(){
        if (xhttp.readyState == 4 && xhttp.status == 200){
            clientToken = xhttp.responseText.content;
        }
    };
    xhttp.open("GET", "http://localhost:8080/client/123/token", true);
    xhttp.setRequestHeader("Content-Type", "application/json");
    xhttp.send();

    braintree.setup(clientToken, "dropin", {
        container: "payment-form"
    });
</script>

我试图只捕获(div class =“searchBx”)标记和里面的标记。

这很难,因为它总是在他之后抓住div标签。 结果应该是:

<div class="searchBx">
 <div>
  <li><a href="/" class="on">somthing</a></li>
 </div>
</div>
<div>
 <li><a href="/" class="on">somthing2</a></li>
</div>

非常感谢。

1 个答案:

答案 0 :(得分:2)

正则表达式不可能匹配你所说的div。

由于div包含另一个div,因此它本身无法区分其中的</div>标记或关闭您希望匹配的div的</div>标记。

<div class="searchBx">
 <div>
  <li><a href="/" class="on">somthing</a></li>
 </div> <!-- This -->
</div> <!-- and this are the same to regex -->
<div>
 <li><a href="/" class="on">somthing2</a></li>
</div>

这里发生了什么:http://regexr.com/3d0jn

对于您需要做的事情,您必须使用您使用的任何语言的DOM解析器。

it's incredibly poor practice using regex to parse HTML,但无论如何,每个人都会这样做。