Совпадение всех вхождений вне тега script - PullRequest
1 голос
/ 20 марта 2020

Я ищу способ сопоставления всех вхождений слова window, которые не находятся внутри тегов <script></script>.

Можно ли указать это в одном regex?

<div class="hidden">
    <div class="btn-group window-btn">
        <button type="button" class="btn btn-default current"></button>
        <button type="button" class="btn btn-default prev"><i class="ed sf"></i></button>
        <button type="button" class="btn btn-default next"><i class="ed sf"></i></button>
    </div>
</div>
<div component="tray" class="window-info">
    <div id="missing-window" class="window window-missing clearfix hide" component="msg">
        <button type="button" class="btn close" aria-hidden="true">X</button>
        <p>Window missing. Please try again.</p>
    </div>
</div>
<div class="hide">
    <script>
        window.addEventListener('load', function () {
            define(config.relative_path + '/assets/templates/bw_gj12.js', function () {
                console.log('path configured')
            });
        });
        window.addEventListener('unload', function () {
            leave_msg()
        });
    </script>
</div>

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

1 Ответ

0 голосов
/ 20 марта 2020

Зависит от вкуса регулярного выражения и того, как вы хотите использовать результаты. Один из способов состоит в том, чтобы сопоставить область <script> как блок, а затем сопоставить (window) поочередно, затем выполнить итерацию по всем совпадениям и использовать только захваты. Пример выражения:

<script\b[^>]*>[\s\S]*?<\/script>|(window)

См. demo .

Это работает, потому что механизм регулярных выражений обычно пытается сначала найти левую часть чередования. Так как это занимает весь блок скрипта, он не может пытаться сопоставить window внутри него. Таким образом, он будет пытаться сопоставить только второй альтернативный вариант вне его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...