Hallo,
In beiden Fällen enthält das Array '<p>','p' in '<p>Hallo, das ist ein <strong>Test</strong></p>', 'strong' vergisst er irgendwie.
Vielleicht noch eine Idee?
also, so ein mist! ich glaube, ich verstehe die javascript-regexp nicht mehr. mit dem /g das wollte irgendwie ueberhaupt nicht wie ich will.
Dein Ansatz war schon okay. Der g-Flag bedeutet nur, dass man exec() mehrfach aufrufen kann und nicht, dass beim ersten Aufruf RegExp.$1 etwa ein Array mit allen Treffern ist (wie z.B. in PHP bei preg_match_all()). Bei einem exec() werden RegExp.$1 usw. immer nur mit den Teiltreffern einer Anwendung des Regulären Ausdrucks gefüllt. Mit einer while-Schleife kann man exec() so oft ausführen, bis der gesamte String durchlaufen ist und keine Treffer mehr geliefert werden. exec() gibt dann false zurück.
<html>
<head>
<script type="text/javascript">
window.onload = function () {
var str = document.getElementById('a').innerHTML;
var expr = /<([a-z0-9]+)(?:\s[^>]*)?>/gi;
var matches = new Array();
while (expr.exec(str)) {
matches[matches.length] = RegExp.$1;
}
window.alert(matches);
}
</script>
</head>
<body>
<div id="a">bla <p>bla <strong>bla</strong> bla</p> bla</div>
</body>
</html>
(?:...) funktioniert gemäß ECMAScript, wäre aber in dem Fall sowieso unnötig.
Mathias