正则表达式只保留标签之间的内容但选择所有内容

标签 regex visual-studio-code

所以在 VS Code 中我使用了这个 <script>(.|\n)*?<\/script>选择 <script> 之间的所有内容的正则表达式模式标签(包括标签),效果很好。 (见下面的例子)

<html>
<p>dsldsdsd</p>
<p>dsldsdsd</p>
<p>dsldsdsd</p>

*<script>
Some code
</script>*

 *<script>
Some code
</script>*

<p>dsldsdsd<p>
<p>dsldsdsd<p>

</html>

因此 <script>(.|\n)*?<\/script> * * 之间的所有内容都会被选中。

现在我真正想做的是做与我向您展示的相反的事情。例如,像这样。选择其他所有内容,但留在里面 <script> </script>标签。 (连同标签)

*<html>
<p>dsldsdsd</p>
<p>dsldsdsd</p>
<p>dsldsdsd</p>*

<script>
Some code
</script>

<script>
Some code
</script>

*<p>dsldsdsd</p>
<p>dsldsdsd</p>

</html>*

所以我在线浏览了一些正则表达式文档,并尝试使用以下正则表达式来选择其他所有内容(并将所有内容保留在 <script> 标记之间)

^((?!<script>(.|\n)*?<\/script>).)*$

但这只是保留了<script>这个词.我做错了什么?

简而言之,我要做的是否定 <script>(.|\n)*?<\/script>表达。

感谢任何帮助。谢谢。

最佳答案

一个想法是match what you don't want but capture what you need\1

<script>[\s\S]*?<\/script>|((?:<(?!script)|[^<])[\s\S]*?)(?=<script|$)

See this demo at regex101

不要跳过开头 <script交替匹配一个字符,不是<或匹配 <后面没有 script通过使用前瞻直到 <script发生或 $结束。

关于正则表达式只保留标签之间的内容但选择所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70208876/

相关文章:

php - 如何在 PHP 中用单个标点符号替换所有重复的标点符号?

c++ - 如何在 Windows 上为 C++ 配置 Visual Studio Code?

node.js - Azure Functions 本地 HTTP 触发器问题及解决方案

visual-studio-code - isShellCommand 属性的实际作用是什么?您应该如何使用它?

git - 使用 VS Code 作为 git diff 工具

regex - 如何删除SAS中两个字符串之间的所有字符(0个或多个)

regex - 来自 dos 窗口的带有 "or"的 grep 命令行 (gnu grep)

javascript - 将 Parantsis 之间的字符串插入数组数组时遇到问题

javascript - 如何为这些句子创建正则表达式?

visual-studio-code - python 解释器在终端窗口中引用 python 的 zen