所以在 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|$)
不要跳过开头 <script
交替匹配一个字符,不是<
或匹配 <
后面没有 script
通过使用前瞻直到 <script
发生或 $
结束。
关于正则表达式只保留标签之间的内容但选择所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70208876/