Die alte Erklärung schrieb es der falschen Maschinerie zu. Dieses Werkzeug übergibt dein Markup dem HTML-Parser des Browsers selbst — DOMParser — und stellt ihm dann einfach Fragen: jedes script[src], jedes Stylesheet-link, jedes Bildelement. Deshalb bringt fehlerhafte Verschachtelung es nicht aus der Bahn. Der reguläre Ausdruck kommt für die eine Aufgabe ins Spiel, die der Parser nicht erledigen kann: URLs zu finden, die Attribut von nichts sind, sondern im Text eines Inline-Skripts oder in einem CSS-url(...) stecken. Zwei verschiedene Probleme, zwei verschiedene Werkzeuge — und zu wissen, was was ist, unterscheidet einen Extraktor, der funktioniert, von einem, der fast funktioniert.