Есть много причин, по которым мы не разбираем HTML с помощью регулярных выражений, и я не буду здесь вдаваться.
В вашем случае, я подозреваю, что внутри тега <marquee>
могут быть новые строки, которым не может соответствовать ваше регулярное выражение.
Попробуйте
/<marquee[^>]*>([\s\S]*?)<\/marquee>/
и посмотрите, чтослучается.
[\s\S]
соответствует любому символу (пробел или непробел, пробел, чтобы компенсировать отсутствие скриптов JavaScripts в режиме «точка соответствует всем»), *?
позволяет совпадению происходить любое количество раз, но как можно меньше, поэтому мы не сопоставляем несколько тегов <marquee>
.