molily: Regulärer Ausdruck für "String darf nicht vorkommen"

Beitrag lesen

Hallo,

JavaScript-RegExps sind ziemlich mächtig, sodass man durchaus fiese Dinge damit tun kann. Beispielsweise Elemente durch einen anderen Typ ersetzen:

function replacer (all, startTag, tagName, attributes, contents, endTag) {  
  var replacement = map[tagName];  
  if (replacement) {  
    return '<' + replacement + attributes + '>' + parse(contents) + '</' + replacement + '>';  
  } else {  
    return startTag + parse(contents) + endTag;  
  }  
}  
function parse (str) {  
  console.debug('parse', str);  
  return str.replace(/(<(\w+)([^>]*)>)(.*?)(<\/\2>)/g, replacer);  
}  
var map = {  
  i: 'em',  
  b: 'strong'  
};  
var str = '<p>bla <strong title="bar"><i>blub</i> foo <b style="font-weight: bold">sülz</b></strong> bar <div>xoxo</div></p>'  
alert(parse(str));

Natürlich ist das nicht sonderlich zuverlässig, aber das sind auch nur 12 Zeilen Code.

Will man Entscheidungen anhand des Kontextes treffen, kommt man ohne einen Parsing-Stack nicht aus (wobei Rekursion sich ja gut dazu eignet, einen solchen auf- und abzubauen). Was nicht heißt, dass man reguläre Ausdrücke nicht dafür verwenden kann, einen Stack aufzubauen.

Mathis