regex - 使用 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 内有不同数量的其他标签,我们将如何做呢?
解决方案
正如我在上面的评论中提到的,如果您的代码与您显示的那部分的格式相似,那么使用查找/替换会变得更容易。例如:
(^\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>\n
go,换行符或字符,直到连续 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>
比这些正则表达式不起作用。众所周知,使用单个正则表达式“难以”处理嵌套标签。只有您知道您的数据是否允许最后一个正则表达式工作。您呈现的数据看起来规则且简单,足以让正则表达式方法起作用。
推荐阅读
- django - 使用 Pytest 测试 DJango 模块中的“if 语句”
- java - 如何使用 compareTo() 方法按字母顺序对字符串进行排序?
- angular - Angular 6 - 取消订阅管道
- javascript - 为什么将文本复制到剪贴板时不应用新行
- uiview - 试图用 UIView 掩盖 UIButton 中的文本
- reactjs - Visual Studio Code:如何为 TSX 组件启用 props 自动完成
- json - Dart 从 Json 中读取
- c++ - Boost::geometry::buffer 不适用于地理坐标系
- swiftui - SwiftUI:路径 .anchorPreference
- kubernetes - nginx-ingress 控制器不进行循环