molily: Regulärer Ausdruck für HTML-Tag

Beitrag lesen

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