peterS.: RegExp: such-muster/patterns zur laufzeit erzeugen

Beitrag lesen

gruss Jörg, hallo tomas,

Ich bemühe hir immer das ungeliebte Kind "eval()":

...

ergebnis.text.search(eval("/"+suche_nach+"/i"));

@Jörg: schande ueber Dich ;-)

aufklaerung:

die String-methode "search" akzeptiert fuer das erste
   argument sowohl parameter vom typ "string" als auch
   "RegExp"-objekte (regulaere ausdruecke).
   letztgenannte koennen nicht nur, wie im jetzigen thread
   immer wieder (re)zitiert, ueber objektliterale erzeugt,
   sondern auch ueber ihre konstruktor-funktion initialisiert
   werden - bsp.:

~~~javascript var regX01 = /^\s+/g; // literal;
   var regX02 = new RegExp("^\s+","g"); // konstruktor;

alert("regX01 = " + regX01 +
   ";\nregX02 = " + regX02 +
   ";\n\n(regX01.toString() == regX02.toString()) ? " +
   (regX01.toString() == regX02.toString()));

  
   wie man sieht, wird fuer "regX02" das steuerzeichen "\"  
   maskiert.  
   erzeugt man zur laufzeit ein suchmuster aus einer oder  
   mehreren variablen, muss man dieser pflicht zur maskie-  
   rung aller in regulaeren ausdruecken moeglicherweise  
   vorkommenden steuerzeichen nachkommen.  
  
   bsp. zur veranschaulichung des problems:  
  
   ~~~javascript
var str="gespendet wurden 2000 US$.";  
   alert(str.replace("2000 US$.","1700 Euro.")); // string-argument;  
   alert(str.replace(/2000 us$./gi,"1700 Euro.")); // unmaskiertes RegExp-objekt;  
   alert(str.replace(/2000 us\$\./gi,"1700 Euro.")); // maskiertes RegExp-objekt;

bsp. fuer eine moegliche automatisierte loesung:

~~~javascript String.prototype.toRegExpString = function () { // does not work in netscape 4;
     return this.replace(/([^$.*+?=!:|\/()[]{}])/g,"\$1");
   };
   var str="gespendet wurden 2000 US$.";
   var searchStr = "2000 us$.";
   var regX = new RegExp(searchStr.toRegExpString(),"gi"); // maskierung;
   alert(searchStr.toRegExpString() + "\n\n" + str.replace(regX,"1700 Euro."));

  
  
   hilfreich ist vielleicht auch noch folgender  
   archivlink zum thema ["Regex in Javascript"](http://forum.de.selfhtml.org/archiv/2004/11/t95377/#m578563).  
  
  
  
   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:]