Зависит от вкуса регулярного выражения и того, как вы хотите использовать результаты. Один из способов состоит в том, чтобы сопоставить область <script>
как блок, а затем сопоставить (window)
поочередно, затем выполнить итерацию по всем совпадениям и использовать только захваты. Пример выражения:
<script\b[^>]*>[\s\S]*?<\/script>|(window)
См. demo .
Это работает, потому что механизм регулярных выражений обычно пытается сначала найти левую часть чередования. Так как это занимает весь блок скрипта, он не может пытаться сопоставить window
внутри него. Таким образом, он будет пытаться сопоставить только второй альтернативный вариант вне его.