peterS.: RegExp-Pattern-String zu RegExp-Objekt

Beitrag lesen

gruss ingobar, hallo Jörg,

Danke. Hat wunderbar geklappt.

nur glueck gehabt.

Du kannst durch einen "eval" auf einen String eine gültiges
RegExp-Objekt erhalten:
»»
var RegExpStr = "/abc/";
var ergebnis = word.match(eval(RegExpStr));

das mag fuer kurze tests angehen, ist aber alles andere als sicher.

man wird nicht umhinkommen, den ausdruck zumindest auf die
   beiden bestandteile eines RegExp hin abzusuchen - suchmuster/
   pattern und flags.
   ueber try {...} catch (exc) {...} und den RegExp-konstruktor
   kann dann der versuch gestartet werden, einen regulaeren
   ausdruck zusammenzubasteln.
   diese vorgehensweise verhindert einen unkontrollierten programm-
   abbruch. fuer das gegebene bsp. ist es sogar sinnvoll, die meldung
   des ausnahme-ereignisses/exception auszugeben.

umgebaut:

<html>  
 <head>  
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">  
  <title>RegularExpression Tester</title>  
  <script type="text/javascript">
~~~~~~javascript
  
  
   var testIt = function () {  
  
   /*String.prototype.toRegExpString = function () {  
     return this.replace(/([\^\$\.\*\+\?\=\!\:\|\\\/\(\)\[\]\{\}])/g,"\\$1");  
    };*/  
    String.prototype.basicTrim = function () {  
     return this.replace(/\s+$/,"").replace(/^\s+/,"");  
    };  
    var regXSeparator = (/^\/(.*)\/(gim|gmi|img|igm|mgi|mig|gi|ig|gm|mg|im|mi|[gim])*$/);  
  
    var regXSource = document.getElementById("inputRegExp");  
    var output = document.getElementById("feedback");  
  
    var regXValue = regXSource.value.basicTrim();  
  
    if (regXSeparator.test(regXValue)) {  
  
     var regXSeparator = regXSeparator.exec(regXValue); // RegExp.$X is marked deprecated;  
     var pattern = regXSeparator[1]; // RegExp.$1;  
     var flags = regXSeparator[2]; // RegExp.$2;  
     var err, regXTest;  
  
     var testText = document.getElementById("inputText").value;  
  
     try {  
      regXTest = new RegExp(pattern, flags);  
     } catch (exc) {  
      err = exc;  
     //alert(exc.message);  
     }  
     if (regXTest) {  
  
      regXSource.value = regXTest;  
     //alert("regXValue\t: " + regXValue + "\nregXTest\t: " + regXTest);  
     //alert(regXTest + ".test(\"" + testText + "\") ? " + regXTest.test(testText));  
  
      if (regXTest.test(testText)) {  
  
       var resultsArr = testText.match(regXTest);  
       output.value = "Wird erfasst";  
  
      } else {  
       output.value = "Wird NICHT erfasst";  
      }  
     } else {  
      output.value = "fehlerhafte syntax: " + err.message;  
     }  
    } else {  
     output.value = "fehlerhafte syntax";  
    }  
   };
~~~~~~html
  
  </script>  
 </head>  
  
 <body>  
  <h3>Testen von regulären Ausdrücken</h3>  
  RegExp: <input type="input" size="56" id="inputRegExp" value="/a(a|b)*/"><br>  
  Text:<br><textarea cols="49" rows="15" id="inputText">abababa</textarea><br>  
  <input type="button" size="20" value="Testen" onclick="testIt()">  
  <input type="input" size="53" id="feedback" value="">  
 </body>  
</html>

by(t)e by(t)e - peterS. - pseliger@gmx.net

--
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]