首页 > 解决方案 > 使用 Regex for VSC 选择具有特定类的所有整个 div

问题描述

我在一个巨大的文件中有大量这样的代码,我只想删除qt该类的所有 div。

    <div class="qt">
      <div class="qy"> Standard Delivery</div>
      <div class="qu">€1.95/$2.99</div>
    </div>
    <div class="qe" data-country="kw.svg">
      <p class="qr"> Kuwait </p>
    </div>
    <div class="qt">
      <div class="qy"> Standard Delivery</div>
      <div class="qu">€1.95/$2.99</div>
      <div class="qs"> Express Delivery</div>
      <div class="qb">€2.95/$3.99</div>
    </div>
    <div class="qe" data-country="ml.svg">
      <p class="qr"> Malawi </p>
    </div>

我想选择所有 divqt类,直到 VSC 中匹配的关闭 div(查找和替换)。</div>考虑到我们要选择的 div 内有不同数量的其他标签,我们将如何做呢?

标签: regexvisual-studio-code

解决方案


正如我在上面的评论中提到的,如果您的代码与您显示的那部分的格式相似,那么使用查找/替换会变得更容易。例如:

(^\s*<div class="qt">)[\s\S]*?(^\s*<\/div>\n) 查找并替换为空。

这种形式要求您的内部 div 是单行的,例如

<div class="qy"> Standard Delivery</div>其中整个元素在一行上。

https://regex101.com/r/LxCr6k/1

如果那些内部 div 不一定是单行的,这是我发现的最适合您的数据的最简单版本:

^\s*<div class="qt">[\s\S]*?<\/div>\n^\s*<\/div>\n

https://regex101.com/r/LxCr6k/6

为了解释后一个:

^\s*<div class="qt"> 找到一个qt类 div

[\s\S]*?<\/div>\n^\s*<\/div>\ngo,换行符或字符,直到连续 2 个<\/div>

现在这个版本确实需要在类开启者</div>之后的 2 个连续结束标签qt中,第二个代表qt开始标签的结束标签。因此,如果您的数据可能如下所示:

<div class="qt">
   <div class="qy"> Standard Delivery</div>
   <div class="qu">€1.95/$2.99
     <div class="qu">€1.95/$2.99</div>  <= inner tag here
   </div>
</div>

比这些正则表达式不起作用。众所周知,使用单个正则表达式“难以”处理嵌套标签。只有您知道您的数据是否允许最后一个正则表达式工作。您呈现的数据看起来规则且简单,足以让正则表达式方法起作用。


推荐阅读