Синтаксический анализ HTML с использованием регулярных выражений не очень хорошая идея, так как он может дать вам неожиданные результаты, когда ваши теги скрипта вложены.
Но на случай, если ваши теги не являются вложенными, вы можете использовать это регулярное выражение, которое будет соответствовать только тегу сценария, содержащему bb
внутри него, и не будет охватывать несколько тегов сценария, как это происходит сейчас. В вашем регулярном выражении [\s\S]*?
соответствует любому символу, из-за которого он также соответствует последовательным тегам <script>
, начиная с первого тега <script>
, охватывающего более одного тега <script>
для покрытия bb
.
<script>(?:(?!<script>)[\s\S])*?bb(?:(?!<script>)[\s\S])*?<\/script>
Это регулярное выражение почти совпадает с вашим регулярным выражением, и единственное, что я сделал, это то, что я изменил [\s\S]*?
part на (?:(?!<script>)[\s\S])*?
это регулярное выражение, которое не позволяет захватывать несколько тегов <script>
в одном совпадении и, следовательно, соответствует только одному тегу скрипта за раз.
Дайте мне знать, если это работает для вас.
Демонстрация в Интернете